У меня есть пользовательский вид (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
Можете ли вы показать код, в котором вы создаете родительское представление, и где вы добавляете subviews в родительский вид? – rocky
Привет, rocky, я только что редактировал мое сообщение с изображением, чтобы показать представления в построителе интерфейса. Другие представления не добавляются программно. – vomi