Cocoa Swift: Subview не изменяет размер с superview - PullRequest
0 голосов
/ 27 апреля 2019

Я добавляю подпредставление (NSView), вот мой код:

override func viewDidAppear() {
    self.view.needsDisplay = true
    let newView = NSView()
    newView.autoresizesSubviews = true
    newView.frame = view.bounds
    newView.wantsLayer = true
    newView.layer?.backgroundColor = NSColor.green.cgColor
    view.addSubview(newView)
}

И он отлично работает

enter image description here Но когдаЯ изменяю размер окна, которое не изменяет размер подпредставления.

enter image description here

Кто-нибудь из вас знает, почему или как можно изменить размер подпредставления с помощью superview?

Я буду очень признателен за вашу помощь

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Вы устанавливаете view.autoresizesSubviews на true, что говорит view изменить размер каждого из его подпредставлений. Но вы также должны указать, как вы хотите изменить размер каждого подпредставления. Вы делаете это, устанавливая подпредставление autoresizingMask. Так как вы хотите, чтобы frame подпредставления продолжал соответствовать bounds суперпредставления, вы хотите, чтобы width и height подпредставления были гибкими, и вы хотели, чтобы его поля X и Y были фиксированными (в нуле). Таким образом:

override func viewDidAppear() {
    self.view.needsDisplay = true
    let newView = NSView()

    // The following line had no effect on the layout of newView in view,
    // so I have commented it out.
    // newView.autoresizesSubviews = true

    newView.frame = view.bounds

    // The following line tells view to resize newView so that newView.frame
    // stays equal to view.bounds.
    newView.autoresizingMask = [.width, .height]

    newView.wantsLayer = true
    newView.layer?.backgroundColor = NSColor.green.cgColor
    view.addSubview(newView)
}
0 голосов
/ 29 апреля 2019

Я нашел исправление для этой проблемы:

override func viewWillLayout() {
        super.viewWillLayout()
        newView.frame = view.bounds

    }
...