我目前正在Swift中编写一个Cocoa应用程序来练习该语言。我还不熟悉AppKit框架,但现在我碰到了一个有趣的问题。
它只包含一个NSWindow,我的自定义NSView。使用autolayout,我可以根据调整大小的窗口控制NSView的大小。
至于我的自定义视图,我想将我的NSView作为容器,我内部有一个NSTextView。
import Foundation
import AppKit
class Fucky2View: NSView
{
var textView : NSTextView!
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
commonInit()
}
override init(frame: CGRect)
{
super.init(frame: frame)
commonInit()
}
func commonInit()
{
print("initing")
self.wantsLayer = true
self.layer?.backgroundColor = NSColor.red.cgColor
textView = NSTextView.init(frame: self.bounds)
self.addSubview(textView)
self.translatesAutoresizingMaskIntoConstraints = false
textView.translatesAutoresizingMaskIntoConstraints = false
textView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
textView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
textView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
textView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
}
func displayText(_ text : String)
{
let attrStr : NSAttributedString = NSAttributedString(string: text+"\n")
textView.textStorage?.append(attrStr)
}
}
所以我只想让NSTextView保持与视图本身相同的大小。我将视图背景着色为红色,以查看其填充是否正确,但这是发生的情况: https://www.youtube.com/watch?v=LTQndoGzzEM
textview的高度有时设置正确,但大部分时间都没有。
我使用UIKit,UIViewController,UIView和UITextView重新创建了相同的应用程序,在iPhone上测试过(我通过旋转调整了屏幕大小),这样功能正常。
有人有任何想法吗?我一起玩优先考虑,但没有帮助。从NSView,并发绘制等尝试了几件事没有帮助。 尝试使用NSLayoutConstraint而不是锚点,没有变化。 唯一的问题是如果我在自定义NSView的drawRect:方法中设置TextView的框架,但我想做一个更好的解决方案。
或者有任何其他想法吗? macOS Sierra 10.12.6,XCode 9.2
由于