Blog スタッフブログ

Swift システム開発

[iOS]縦方向のTextAlignmentに対応したTextView

Swift

こんにちは、株式会社MIXシステム開発担当のBloomです。

早速本題の縦方向のTextAlignmentに対応したカスタムTextViewクラスを共有させていただきたいと思います。

VerticallyAlignmentTextViewクラス

class VerticallyAlignmentTextView: UITextView {
    enum VerticalAlignment {
        case top
        case center
        case bottom
    }
    var textVerticalAlignment: VerticalAlignment = .top
    override var contentSize: CGSize {
        didSet {
            switch textVerticalAlignment {
            case .top:
                contentInset = UIEdgeInsets.zero
            case .center:
                var topCorrection = (bounds.size.height - contentSize.height * zoomScale) / 2.0
                topCorrection = max(0, topCorrection)
                contentInset = UIEdgeInsets(top: topCorrection, left: 0, bottom: 0, right: 0)
            case .bottom:
                var topCorrection = bounds.size.height - contentSize.height * zoomScale
                topCorrection = max(0, topCorrection)
                contentInset = UIEdgeInsets(top: topCorrection, left: 0, bottom: 0, right: 0)
            }
        }
    }
}

実装例

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let textView = VerticallyAlignmentTextView(frame: CGRect(x: 20,
                                                                 y: 40,
                                                                 width: self.view.bounds.size.width - 40,
                                                                 height: 300))
        textView.textVerticalAlignment = .center
        textView.layer.borderColor = UIColor.black.cgColor
        textView.layer.borderWidth = 1.0
        textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod"
        self.view.addSubview(textView)
    }

実行結果

左側がcenter指定、右側がbottom指定をした場合の表示となります。

これで簡単に縦方向のAlignmentも指定できるようになりました。良かったですね。

参考文献

How to center text vertically in an UITextView by using Swift3? – geek is stupid