В настоящее время я пишу приложение для какао на языке Swift для изучения языка.Я пока не слишком знаком с фреймворком 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
Высота текстового представления иногда устанавливается правильно, но в большинстве случаев нет.
Я заново создал то же самое приложение с UIKit, UIViewController, UIView и UITextView, протестировано на iPhone (я изменил размер экрана с вращением), и это работало правильно.
У кого-нибудь есть идеи?Я играл с приоритетами, но не помог.Пробовал несколько вещей из NSView, одновременное рисование и т.д., не помогло.Пробовал с NSLayoutConstraint вместо якорей, без изменений.Единственное, что было, если я установил рамку TextView в методе drawRect: метод NSView, но я бы хотел сделать более удачное решение.
Или у кого-нибудь есть другая идея?macOS Sierra 10.12.6, XCode 9.2
Спасибо