HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了macos – 如何使用自动布局设置NSSplitView面板的最小和初始宽度?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是OS X可可开发的新手,正在使用Storyboard for Yosemite开发 Swift应用程序.

在我的应用程序的主窗口中,我有一个NSSplitViewController.对于左侧和右侧的每个面板,我添加一个包含所有子视图的根自定义视图.

使用自动布局,我已将自定义视图固定到拆分视图中的视图边缘,并且还定义了自定义视图宽度的约束大于或等于最小数量.

一切正常.窗口打开时,窗口宽度是两个面板的最小宽度约束的总和.我无法弄清楚的是下一步.

如何为自定义视图提供另一个宽度约束,以便在窗口打开时,它的初始宽度高于最小值(比方说300)?我想要的是面板可以小到200,但我希望初始尺寸为300.我不希望窗口以允许的最小宽度打开.然后,用户每次都必须调整大小,这不是一个好的用户体验.

为了尝试实现这一点,我为自定义视图添加了具有较低优先级(尝试所有不同值200,500,800等)的300的另一个宽度约束,但它们都没有给出我想要的宽度值为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 )>]

由于要进行排序的大量限制,我决定制作一个全新的测试项目,看看这是开箱即用还是我在应用程序中更改的设置.在测试项目中,我刚刚删除了视图控制器,在窗口中添加一个拆分视图控制器,并为每个面板添加了两个简单的文本视图.然后运行项目,左侧​​面板折叠.所以我为每个文本视图添加一个最小宽度约束,然后在测试项目中发生了同样的事情.无论我在故事板中设置什么,窗口大小都是最小宽度的增加.也许唯一的方法是在代码中设置窗口/拆分视图大小.

解决方法

您不必添加其他约束来强制执行此操作.认情况下,窗口将具有在故事板中配置的大小.如果它变得越来越小,这表明有一些限制迫使它变小.

窗口将其大小保持为优先级500(NSLayoutPriorityWindowSizeStayPut).较高优先级的约束可以将其推或拉到不同的大小.窗口的当前大小将覆盖优先级较低的约束.

因此,您应该寻找优先级高于500的约束,试图将其拉得更窄.例如,内容拥抱控件的优先级.另一种可能性是拆分视图项的保持优先级.如果那些高于500并且从故事板加载的视图的初始大小是最小的,那么我希望拆分视图更愿意将它们保持在那些大小比窗口更喜欢保持其大小的强度.

一个可能有用的诊断技术是记录[someView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizo​​ntal].您可以为窗口的contentView或拆分视图执行此操作.

大佬总结

以上是大佬教程为你收集整理的macos – 如何使用自动布局设置NSSplitView面板的最小和初始宽度?全部内容,希望文章能够帮你解决macos – 如何使用自动布局设置NSSplitView面板的最小和初始宽度?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: