2015-07-26 2 views
1

У меня есть пользовательский NSView, встроенный в NSScrollView.Swift: Resize Embedded Custom NSView

Я установил пользовательский вид для использования другого контроллера вида.

import Cocoa 

class ViewController: NSViewController 
{ 

    @IBOutlet weak var clipView: NSClipView! 
    var vc : NSViewController? 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     if let storyboard = NSStoryboard(name: "Main",bundle: nil) 
     { 
      vc = storyboard.instantiateControllerWithIdentifier("vc") as? NSViewController 
      clipView.documentView = vc!.view 
     } 
    } 
} 

Это все работает, но я хочу, чтобы контроллер просмотра в пользовательском представлении увеличивался, когда я изменяю размер внешнего окна.

Я установил ограничения, и пользовательский вид растет соответственно, но содержимое говорит о том же ширине.

enter image description here

Когда окно расширяется размер изменения пользовательских кадров, но его содержимое не изменить. Например, я хотел бы, чтобы кнопка в этом случае оставалась правой в представлении.

enter image description here

Как вы можете видеть на красном фоне настраиваемого размера просмотра изменений, когда расширяет окно, но кнопка остается в своем первоначальном месте.

Как получить внутренний вид для изменения размера с внешним видом?

ОБНОВЛЕНИЕ: Следуйте приведенным ниже рекомендациям. Я добавил NSScrollView сейчас, и со всеми ограничениями он отлично подходит для изменения размера. Когда я удалить нижнее ограничение коллапсирует в себе и является нижним выровнено:

enter image description here

Я думаю, мне нужно, чтобы определить высоту и в довершении выровнять вид. Есть идеи?

ответ

1

Если установить фон на самом взгляд, вы может видеть, что его размер/позиция не изменяется.

vc.view.wantsLayer = true 
vc.view.layer?.backgroundColor = NSColor.blueColor().CGColor 

example

Таким образом, вы можете добавить ограничения говорю это, чтобы заполнить весь вид клипа:

vc.view.translatesAutoresizingMaskIntoConstraints = false 

// these are 10.11-only APIs, but you can use the visual format language or any other autolayout APIs 
vc.view.leadingAnchor.constraintEqualToAnchor(vc.view.superview!.leadingAnchor).active = true 
vc.view.topAnchor.constraintEqualToAnchor(vc.view.superview!.topAnchor).active = true 
vc.view.bottomAnchor.constraintEqualToAnchor(vc.view.superview!.bottomAnchor).active = true 
vc.view.trailingAnchor.constraintEqualToAnchor(vc.view.superview!.trailingAnchor).active = true 

fixed version

Но тогда я бы спросить, почему вы используете свиток взглянуть вообще?

+0

Это был отличный ответ на мой вопрос и был почти тем, что я искал. Вы были правы, чтобы спросить, почему я использовал прокрутку. На самом деле у меня есть несколько таблиц, которые я хочу представить вертикально. Я пытался получить представление, чтобы расти горизонтально, сохраняя вертикальный свиток. Используя вышеприведенный код, очевидно, отображает все содержимое представления на экране. Как сохранить вертикальную высоту? Спасибо – iphaaw

+0

@iphaaw, вы должны уметь просто опустить нижнее ограничение. Представления прокрутки/клипа предназначены для того, чтобы справиться с представлением документа, которое больше их границ. – jtbandes

+0

Я следил за предложениями ниже. Я добавил NSScrollView сейчас, и со всеми ограничениями он отлично подходит для изменения размера.Когда я удаляю нижнее ограничение, он сворачивается сам по себе и выравнивается снизу: См. Обновленный вопрос для изображения. Думаю, мне нужно указать высоту и выровнять верхний вид. Какие-либо предложения? Спасибо – iphaaw

0

Предполагая, что вы имеете право ограничивает на кнопку после того, как внешние ограничения, вид изменение, которое вы можете вызвать view.layoutIfNeeded() или button.layoutIfNeeded()