Проблема с автоматическим размещением какао - NSTextView внутри собственного NSView - PullRequest
0 голосов
/ 25 мая 2018

В настоящее время я пишу приложение для какао на языке 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

Спасибо

...