前提・実現したいこと
tiktokのtextViewのような文字だけを縁取るtextViewを作りたくてこの記事を参考にTextViewを作ってみました
このコードで左右にオートレイアウトをつけると、縁取る形にならないのでX軸のみにオートレイアウトをつけています
現段階だと自分で改行しないと画面から切れていってしまうので、1行に入る最大の文字数を指定して、textViewDelegateで改行を入れたいと考えています。
アドバイスお願いします。
該当のソースコード
swift
1class UIViewController: UIViewController { 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 let instagramTextView = InstagramTextView() 7 instagramTextView.font = .systemFont(ofSize: 30, weight: .heavy) 8 instagramTextView.backgroundColor = .clear 9 instagramTextView.textAlignment = .center 10 instagramTextView.translatesAutoresizingMaskIntoConstraints = false 11 view.addSubview(instagramTextView) 12 instagramTextView.topAnchor.constraint(equalTo: view.topAnchor, constant: 60).isActive = true 13 instagramTextView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 24).isActive = true 14 instagramTextView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -24).isActive = true 15 16 } 17}
ためしに参考記事の通りコードをコピーし、上下左右に AutoLayout をつけた状態でテキストを打ち込んでみましたが、きちんと InstagramTextView 内部で改行されるようですし、縁取りも想定通り行われているようです。
おそらく、どこか勘違いされている部分があるような気がするのですが、AutoLayout や InstagramTextView の設定はどのようにされていますでしょうか。
コードと写真の追加をしました。
確認していただけると幸いです。
あくまで感想ですぐに実装に繋がる内容ではないのですが、UITextView だと複数にまたがる記述(UITextView で自動的に複数行に分割された行)については、ひとつの大きな矩形として扱われているようです。
オリジナルコードの
// 1. 各行の CGRect(rects) を取得
を追っていっていただければ、なんとなく雰囲気は掴めるのではないでしょうか。
ひとつは、set() の中で前もって複数行にまたがる内容を、物理的な複数ととして処理する方法があるのかもしれませんが、その場合、前の行の幅が短くなった場合に強制的に入れた改行をどのように処理すべきか考慮いする必要がありそうです。
ざっと調べた感じだと、同じような実装をされている例はあまりないのですが、丁寧におっていくと良い解決方法が見つかるかもしれません。
ありがとうございます。
一つ一つ詳しくおっていきます。