fum*_*007 3 macos cocoa nstextfield autolayout nsautolayout
我一直在尝试使用多行NSTextField自动布局preferredMaxLayoutWidth。我不知道为什么这不起作用。
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
let textField = NSTextField()
textField.cell!.usesSingleLineMode = false
textField.cell!.wraps = true
textField.cell!.lineBreakMode = .byCharWrapping
view.addSubview(textField)
textField.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
textField.topAnchor.constraintEqual(to: view.topAnchor),
textField.leadingAnchor.constraintEqual(to: view.leadingAnchor),
textField.widthAnchor.constraintEqual(toConstant: 20)
])
textField.preferredMaxLayoutWidth = 20
textField.stringValue = "abcdefghijklmnopqrstuvwxyz"
view.needsLayout = true
view.layoutSubtreeIfNeeded()
print("Intrinsic content size: \(textField.intrinsicContentSize)")
print("Fitting size: \(textField.fittingSize)")
}
}
Run Code Online (Sandbox Code Playgroud)
打印:
本质内容大小:(-1.0,21.0)
合身尺寸:(20.0,21.0)
(21.0是一行的大小。)
还有另一种使用自动约束和Interface Builder 使NSTextField多行的解决方案。
Wraps从布局中选择Character Wrap从换行选项unchecked并添加以下示例约束
与所需的常量。并且不要添加任何特定的高度限制。
下面的一些屏幕截图可能会有所帮助。
好的。所以事实证明,当 anNSTextField处于编辑模式时,一个秘密NSTextView(又名 \xe2\x80\x9cfield editor\xe2\x80\x9d)接管编辑部分。在编辑结束之前,文本更改不会同步回文本字段。这解释了为什么我的示例代码只能在非编辑模式下工作。
您可以通过访问该属性强制进行同步NSTextField.stringValue。这就是我在子NSTextField类中所做的。我还提供了我自己的实现,intrinsicContentSize因为 Apple\xe2\x80\x99s 实现在编辑模式下无法工作,并且在非编辑模式下有错误。
| 归档时间: |
|
| 查看次数: |
3396 次 |
| 最近记录: |