2014-07-04 64 views
0

特定视图我有这样的:Typical form style调整与上海华

用户希望调整窗口的大小,我想描述字段具有超强的调整。 (理想情况下,我希望关键字和描述可以同等调整大小,但不要让它变得疯狂)

我设法让过去的工作方式是选择上半部分并向左上角添加约束,然后选择下半部分并添加约束左右下角,这样的:

Autolayout top half

Autolayout bottom half

,最后

Description fix

但这突然停止工作。窗口突然只允许水平调整大小,而不是垂直调整大小。

编辑:输出constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationVertical从描述滚动视图:

(
    "<NSContentSizeLayoutConstraint:0x6100002b5600 V:[NSTextField:0x608000194ec0(17)] Hug:750 CompressionResistance:750>", 
    "<NSLayoutConstraint:0x608000098ba0 V:[NSTextField:0x608000194ec0]-(9)-[NSTextField:0x608000195060]>", 
    "<NSContentSizeLayoutConstraint:0x6100002b57e0 V:[NSTextField:0x608000195060(17)] Hug:750 CompressionResistance:750>", 
    "<NSLayoutConstraint:0x6080000969e0 V:[NSTextField:0x608000195060]-(72)-[NSTextField:0x6080001949e0]>", 
    "<NSContentSizeLayoutConstraint:0x6100002b54e0 V:[NSTextField:0x608000194d20(17)] Hug:750 CompressionResistance:750>", 
    "<NSContentSizeLayoutConstraint:0x6100002b53c0 V:[NSTextField:0x608000194b80(17)] Hug:750 CompressionResistance:750>", 
    "<NSLayoutConstraint:0x60800009a0e0 V:[NSTextField:0x608000194910]-(30)-[NSTextField:0x608000194b80]>", 
    "<NSContentSizeLayoutConstraint:0x6100002b50c0 V:[NSTextField:0x608000194910(17)] Hug:750 CompressionResistance:750>", 
    "<NSLayoutConstraint:0x60800009a220 V:[NSTextField:0x608000194840]-(NSSpace(8))-[NSTextField:0x608000194910]>", 
    "<NSContentSizeLayoutConstraint:0x6100002b4fa0 V:[NSTextField:0x608000194840(17)] Hug:750 CompressionResistance:750>", 
    "<NSLayoutConstraint:0x60800009a3b0 V:|-(22)-[NSTextField:0x608000194840] (Names: '|':NSView:0x608000128fc0)>", 
    "<NSLayoutConstraint:0x608000099410 NSTextField:0x608000194ec0.baseline == NSTextField:0x608000194f90.baseline>", 
    "<NSLayoutConstraint:0x608000098ce0 NSTextField:0x608000194f90.centerY == NSTextField:0x608000194ec0.centerY>", 
    "<NSLayoutConstraint:0x6080000987e0 NSTextField:0x6080001949e0.top == NSScrollView:0x6080001c6ea0.top>", 
    "<NSLayoutConstraint:0x608000099730 NSTextField:0x608000194d20.baseline == NSTextField:0x608000194df0.baseline>", 
    "<NSLayoutConstraint:0x608000096a30 NSTextField:0x608000194df0.centerY == NSTextField:0x608000194d20.centerY>", 
    "<NSLayoutConstraint:0x608000099fa0 NSTextField:0x608000194b80.baseline == NSTextField:0x608000194c50.baseline>", 
    "<NSAutoresizingMaskLayoutConstraint:0x61000068a870 h=-&- v=-&- V:[NSView:0x608000128fc0]-(0)-| (Names: '|':NSThemeFrame:0x100350960'PDF Properties')>", 
    "<NSAutoresizingMaskLayoutConstraint:0x61000068a8c0 h=-&- v=-&- V:|-(16)-[NSView:0x608000128fc0] (Names: '|':NSThemeFrame:0x100350960'PDF Properties')>", 
    "<NSLayoutConstraint:0x610000687d00 'NSWindow-current-height' V:[NSThemeFrame:0x100350960'PDF Properties'([email protected])] priority:500>", 
    "<NSLayoutConstraint:0x608000098600 V:[NSScrollView:0x6080001c6f90]-(5)-[NSScrollView:0x6080001c6ea0]>", 
    "<NSLayoutConstraint:0x608000098b50 V:[NSTextField:0x608000194f90]-(5)-[NSScrollView:0x6080001c6f90]>", 
    "<NSLayoutConstraint:0x608000098e20 V:[NSTextField:0x608000194df0]-(5)-[NSTextField:0x608000194f90]>", 
    "<NSLayoutConstraint:0x6080000991e0 V:[NSTextField:0x608000194c50]-(5)-[NSTextField:0x608000194df0]>" 
) 

回答

1

这些截图不达意的对我。在文档大纲视图中显示约束条件可能会更好,但实际上文本是最好的。你可以添加这样的事情在你的代码,某个地方,然后将其粘贴输出到你的问题:

NSLog(@"%@", [_descriptionScrollView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationVertical]); 

无论如何,我认为你应该有什么样的这种视觉格式的语言字符串表示的约束(更多或更少):

V:|-titleTextField-6-authorsScrollView(==40)-6-isbnTextField-6-publisherTextField-6-versionTextField- 
6-descriptionScrollView(==keywordsScrollView,>=authorsScrollView)-6-keywordsScrollView-6-rightsTextField- 
6-licenseTextField-6-licenseURLTextField-6-ccURLTextField-saveMetadataButton-| 

为了便于阅读,我突破了这一点。

想法是除了描述和关键字滚动视图之外的所有内容的垂直距离都是固定的。文本字段的高度是固有的。作者滚动视图的高度由高度约束指定。控件之间的距离固定为标准距离或指定距离。

我已经指定描述滚动视图的高度等于关键字滚动视图的高度。那样的话,他们应该在所有其他需要的距离完成切割之后均匀分割窗口高度的剩余部分。我为滚动视图设置了一个最小高度,以便窗口的高度不会超过作者滚动视图的高度。

并非所有的控件都在我的字符串中提到。字段标签和“复制到剪贴板”和“显示许可证”按钮应设置为与其他控件在其行上共享基线。同样,图像视图应该相对于许可证文本字段进行设置。

您需要避免超出这些限制的过多限制。你会过度限制你的布局,这将阻止窗口调整大小(或者甚至可能导致不可满足的限制)。你不必像我这样做,但你不应该有更多。

另外,仅仅因为我在代码中表达了这一点,并不意味着你应该这样做。你可以在IB做这个。这只是用类似代码的文本解释的最简单的方法。

+0

感谢您的回应!我在文中澄清了我正在做的更多。我还将滚动视图的输出(NSTextField的superview.superview)添加到问题中。 – Kalle

+0

此外,我同意你的视觉字符串,但我不知道如何在IB中做到这一点。 – Kalle

+0

它在我看来像你有一些无关的限制。标签之间不应有约束。他们应该只涉及他们描述的领域。有一些文字字段与基线和垂直中心相关,我认为这些文字字段是无害多余的,因为它们是固定的高度。要应用我的格式字符串,可以清除现有约束,然后逐步建立相关对象之间的约束。如果你不想清除,选择每个对象,并确保垂直约束只是你想要的。 –

0

添加阿里纳斯这个,因为它绊倒了我很长一段时间:

如果您有不能垂直调整子视图,这些最终会拉动整个事情一起。一个视图的例子是NSTextField

例如,如果你有这样的设置:V:|-[textField]-|,那么无论你做什么,包含的视图将被缩小到约21点的高度。