2017-12-29 29 views
1

私はUILabelとUITextViewを持っていますが、私の意図は同じテキストを表示することと外観が同じであることです。私は今、それについていくつかの問題を抱えています。UILabelとUITextViewの改行が一致しません

import UIKit 
import PlaygroundSupport 

class MyViewController : UIViewController { 
    override func loadView() { 
     let view = UIView() 
     view.backgroundColor = .white 

     let label = UILabel() 
     label.frame = CGRect(x: 100, y: 100, width: 247, height: 39) 
     label.numberOfLines = 0 
     label.font = UIFont.systemFont(ofSize: 16) 
     label.text = "I’m on my way back to London today" 
     label.textColor = .black 
     label.backgroundColor = .red 
     label.lineBreakMode = .byWordWrapping 
     view.addSubview(label) 

     let textView = UITextView() 
     textView.frame = CGRect(x: 100, y: 200, width: 247, height: 39) 
     textView.font = label.font 
     textView.text = label.text 
     textView.textColor = label.textColor 
     textView.backgroundColor = label.backgroundColor 
     textView.textContainer.lineBreakMode = label.lineBreakMode 
     textView.textContainerInset = UIEdgeInsets.zero 
     textView.textContainer.lineFragmentPadding = 0 
     view.addSubview(textView) 

     self.view = view 
    } 
} 
// Present the view controller in the Live View window 
PlaygroundPage.current.liveView = MyViewController() 

enter image description here

あなたが見ることができるように、彼らは同じように両方の設定だが、改行はUITextView上の別の場所で発生します。私はスウィフト遊び場でデモを設定しました。私はlineBreakModeを両方とも同じ値に設定しました。また、UITextViewでtextContainerInsetslineFragmentPaddingを削除したので、テキストは両方のビュー内で同じパディングで配置されます。

+0

確かに非常に扱いにくい。これはデバイス上でどのように動作しますか? –

+0

@意味の事柄はまったく同じ – Andrew

答えて

2

IOS 11のUILabelに変更され、孤立した単語が修正されました。私はそこにいたいと思うが、それを遮断する方法はない。これを行う唯一の方法は、編集不可能/非スクロール可能なテキストビューまたはCATextLayerを使用することです。 UILabelのサイジング属性を取得するには、手動で行う必要があります。

thisを参照してください。問題は同様でした。その答えではありませんが、私はUITextViewが古い方法を包んでいることに気付きました。私は今、UITextViewを使用していて、私は手動でtextDidChangeのフォントサイズを調整します。元のフォントを保持するので、いつでもサイズを変更できます。

+0

うわー、素晴らしい答え。この孤立した単語の問題について少し詳しく説明できますか? –

+0

私はタイプ/フォントの人ではありませんが、デザイン上、1本の語を単独で使用することは好ましくありません。だからAppleはiOS UILabelを変更して、それをさらに均等にするために余分な言葉を取り除く。私がこの問題を抱えているのは、文字列のサイジング、コアテキストメソッド、その他何も、どのように動作するかを解決することができないということです。おそらく起こっている例は、https://github.com/StockX/EvenlyWrappedLabelのようなものです。私はそれを無効にする方法があるか、またはコアテキストメソッドが少なくともどのテキストがシフトされたかを教えてくれることが私にはありがたいと思っています。がんばろう。 – agibson007

+1

良い説明をありがとう。私はこれがAppleの悪い選択だと思う! –

関連する問題