テキスト内でソフト改行がどこで発生するかを定義しようとしています。NSLayoutManagerDelegate
メソッドlayoutManager(_:shouldBreakLineByWordBeforeCharacterAt:)
は、開始する場所のようです。私の問題は、私の他の方法はありますが、呼び出されていないということです。これは基本的なUITextView
セットアップで発生しています。どのような条件の下でこのメソッドが呼び出されます - 私は正しい場所を探していますか?私は全体のスーパーを占有テキストビューで、実際のアプリで、あなたのコードを試みたが、最初の文字列がある場合shouldBreakLineByWordBeforeCharacterAt
は起動時に複数回呼び出されTextKitでソフト改行が発生する場所を決める方法は?
class DemoTextView: UITextView, NSLayoutManagerDelegate {
// MARK: - Init
required init() {
let textStorage = NSTextStorage(string: "i will overflow several lines probably just saying")
let layoutManager = NSLayoutManager()
textStorage.addLayoutManager(layoutManager)
let textContainer = NSTextContainer(size: CGSize(width: 100, height: 100))
textContainer.lineBreakMode = .byWordWrapping
textContainer.lineFragmentPadding = 0
layoutManager.addTextContainer(textContainer)
// Super
super.init(frame: .zero, textContainer: textContainer)
self.textContainerInset = .zero
// Configure Text View
layoutManager.delegate = self
self.isScrollEnabled = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// Layout Manager
func layoutManager(_ layoutManager: NSLayoutManager, shouldBreakLineByWordBeforeCharacterAt charIndex: Int) -> Bool {
print(#function)
return false
}
func layoutManager(_ layoutManager: NSLayoutManager, shouldBreakLineByHyphenatingBeforeCharacterAt charIndex: Int) -> Bool {
print(#function)
return false
}
}
@mattが更新されました。スタックは完全にカスタムではありませんが、私はデリゲートを設定しました。/ – mattsven
@mattライブビューを使ってPlaygroundでこれを試していました。多分それはそれですか? – mattsven
私は全部の手を洗う。遊び場は悪魔の仕事です。 – matt