2016-12-20 4 views
0

У меня есть пользовательский вид (NSView) с 3 подвидов, расположение по вертикали, как это:NSView не может быть изменен из-за размера подвид установлен программно

---------------------------------------------------- 
bar : always visible. With a button to toggle tnView Fixed height 
---------------------------------------------------- 
tnView : height is 30 if toggled, zero if not.   Height = 30 or zero 
---------------------------------------------------- 
PDFView that takes the remaining space to to bottom Flexible height 
---------------------------------------------------- 

Проблема вызвана tnView, что можно показать (высота = 30) или скрытым (высота = 0), нажав кнопку. Это предотвращает основной вид (родительский вид 3, описанный здесь выше), чтобы быть измененным размером по вертикали

Вот код моего ViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 
    tnView.autoresizingMask = NSAutoresizingMaskOptions([.viewWidthSizable, .viewHeightSizable, .viewMaxXMargin,.viewMinYMargin,.viewMaxYMargin]) 
    tnView.translatesAutoresizingMaskIntoConstraints = true 
    // hide view at init 
    tnView.frame.origin.y += tnViewHeight // constant set to 30 
    tnView.frame.size.height = 0 
    tnView.needsDisplay = true 
} 

// Action connected to the toggle button 
@IBAction func openTNView(_ sender: NSButton) { 
    // should the view be opened or closed? 
    let isOpenView = self.tnView.frame.size.height == 0 

    // Create the dictionary for animating the view 
    var viewDict = [String: Any]() 
    viewDict[NSViewAnimationTargetKey] = self.tnView 
    viewDict[NSViewAnimationStartFrameKey] = self.tnView.frame 
    var endFrame = self.tnView.frame 
    endFrame.origin.y -= isOpenView ? tnViewHeight : -tnViewHeight 
    endFrame.size.height = isOpenView ? tnViewHeight : 0 
    viewDict[NSViewAnimationEndFrameKey] = endFrame 

    // Create the view animation object 
    let theAnim = NSViewAnimation(viewAnimations: [viewDict]) 
    theAnim.duration = 0.4 // in seconds 
    theAnim.start() 

    if isOpenView { 
     // isHidden is set to true automatically when resizing to zero => unset the flag 
     self.tnView.isHidden = false 
    } 
} 

Проблема заключается в том, что основной вид не может быть изменен по вертикали (его высота не может измениться). Все хорошо по горизонтали. Я попытался изменить autoresizingMask, но безуспешно. Любая идея? Спасибо :-)

EDIT: ниже представлена ​​структура представления в построителе интерфейса. The View Structure in IB http://img11.hostingpics.net/pics/550625ibstruct.png

+0

Можете ли вы показать код, в котором вы создаете родительское представление, и где вы добавляете subviews в родительский вид? – rocky

+0

Привет, rocky, я только что редактировал мое сообщение с изображением, чтобы показать представления в построителе интерфейса. Другие представления не добавляются программно. – vomi

ответ

0

Я не мог найти решение этого беспорядка, но я нашел обходное решение, используя NSSplitView. Это намного проще, и конечный результат точно такой же (кроме ошибок нет :-)).

 Смежные вопросы

  • Нет связанных вопросов^_^