Cocoa Autolayout问题 - 自定义NSView中的NSTextView

时间:2018-05-25 14:07:25

标签: cocoa autolayout nsview nstextview nslayoutanchor

我目前正在Swift中编写一个Cocoa应用程序来练习该语言。我还不熟悉AppKit框架,但现在我碰到了一个有趣的问题。

它只包含一个NSWindow,我的自定义NSView。使用autolayout,我可以根据调整大小的窗口控制NSView的大小。

Base structure

至于我的自定义视图,我想将我的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

由于

0 个答案:

没有答案