【发布时间】:2015-07-30 16:38:50
【问题描述】:
我是 OS X 可可开发的新手,我正在使用 Storyboards for Yosemite 开发一个 Swift 应用程序。
在我的应用程序的主窗口中,我有一个 NSSplitViewController。对于左右每个面板,我添加了一个根自定义视图,其中包含所有子视图。
使用自动布局,我已将自定义视图固定到拆分视图中视图的边缘,并且还定义了自定义视图宽度大于或等于最小值的约束。
这一切都很好。当窗口打开时,窗口宽度是两个面板的最小宽度约束之和。我想不通的是下一步。
如何给自定义视图另一个宽度约束,以便在窗口打开时,它的初始宽度高于最小值(比如说 300)?我想要的是面板能够小到 200,但我希望初始大小为 300。我不希望窗口以允许的最小宽度打开。然后用户每次都必须调整它的大小,这不会是一个好的用户体验。
为了尝试实现这一点,我为自定义视图添加了另一个 300 的宽度约束,优先级较低(尝试了所有不同的值 200、500、800 等),但它们都没有给我想要的宽度结果值为 300,面板的最小宽度为 200。
必须有一种方法来实现这一点,但我只是不知道怎么做。请帮忙!
更新
这是 NSSplitViewController 视图的 constraintsAffectingLayoutForOrientation 的输出:
<NSLayoutConstraint:0x6000000923e0 H:|-(0)-[NSView:0x600000124c40] (Names: '|':NSView:0x600000124ba0 )>,
<NSLayoutConstraint:0x6000000924d0 H:[NSView:0x600000124c40]-(0)-| (Names: '|':NSView:0x600000124ba0 )>,
<NSLayoutConstraint:0x600000092070 H:[NSView:0x600000124c40(>=200)]>,
<NSLayoutConstraint:0x600000092660 _NSSplitViewItemViewWrapper:0x6000001416b0.width == NSView:0x600000124ba0.width>,
<NSLayoutConstraint:0x600000093a10 H:|-(0)-[_NSSplitViewItemViewWrapper:0x6000001416b0](LTR) (Names: '|':NSSplitView:0x608000123b60 )>,
<NSLayoutConstraint:0x600000093b50 H:[_NSSplitViewItemViewWrapper:0x6000001416b0]-(1)-[_NSSplitViewItemViewWrapper:0x6000001429f0](LTR)>,
<NSAutoresizingMaskLayoutConstraint:0x600000093d80 h=-&- v=-&- H:[NSSplitView:0x608000123b60]-(0)-| (Names: '|':NSView:0x6000001242e0 )>,
<NSAutoresizingMaskLayoutConstraint:0x600000093b00 h=-&- v=-&- H:|-(0)-[NSSplitView:0x608000123b60] (Names: '|':NSView:0x6000001242e0 )>,
<NSAutoresizingMaskLayoutConstraint:0x600000094050 h=-&- v=-&- H:|-(0)-[NSView:0x6000001242e0] (Names: '|':NSThemeFrame:0x100940be0'Main Window' )>,
<NSLayoutConstraint:0x600000093c40 H:[_NSSplitViewItemViewWrapper:0x6000001429f0]-(0)-|(LTR) (Names: '|':NSSplitView:0x608000123b60 )>,
<NSLayoutConstraint:0x600000092890 H:[NSView:0x600000124f60]-(0)-| (Names: '|':NSView:0x600000124ec0 )>,
<NSLayoutConstraint:0x6000000926b0 H:[NSView:0x600000124f60(>=400)]>,
<NSLayoutConstraint:0x608000099d20 _NSSplitViewItemViewWrapper:0x6000001429f0.width == NSView:0x600000124ec0.width>,
<NSLayoutConstraint:0x600000092840 H:|-(0)-[NSView:0x600000124f60] (Names: '|':NSView:0x600000124ec0 )>]
由于需要解决大量的限制,我决定创建一个全新的测试项目,看看这是否是开箱即用的,或者是我在应用程序中更改了某些设置。在测试项目中,我刚刚删除了视图控制器,在窗口中添加了一个拆分视图控制器,并在每个面板中添加了两个简单的文本视图。然后运行项目,左侧面板被折叠。所以我为每个文本视图添加了一个最小宽度约束,然后在测试项目中发生了同样的事情。无论我在情节提要中将其设置为什么,窗口大小都是最小宽度的加法。也许解决这个问题的唯一方法是在代码中设置窗口/拆分视图大小。
【问题讨论】:
标签: macos autolayout osx-yosemite xcode-storyboard