2014-07-04 156 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點的高度。