簡體   English   中英

UITableViewAutomaticDimension是否突破約束?

[英]UITableViewAutomaticDimension breaking constraints?

我正在嘗試使用UITableViewAutomaticDimension ,但在使單元格變為全寬和正確高度而又不引起NSLayoutAutomaticSizeConstraint...問題時遇到了麻煩。 如果我在單元格上關閉了自動尺寸限制,則它不是全寬。

在此處輸入圖片說明

我有兩個按鈕,它們在內容視圖中具有水平和垂直約束。 它們之間有垂直間距限制,每個按鈕都有高度限制。

如果我關閉AutoResizingMaskAutoResizingMask得到一個AutoResizingMask寬的單元格。 如果我繼續使用它,則會遇到違反布局約束的情況,但可以正確渲染。

我如何獲得想要的行為?

translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7f856b169650 V:[UIButton:0x7f856b16a510'+(null)'(50)]>",
    "<NSLayoutConstraint:0x7f856b173dd0 UIButton:0x7f856b16a510'+(null)'.top == UITableViewCellContentView:0x7f856b16bfa0.topMargin>",
    "<NSLayoutConstraint:0x7f856b173e70 UITableViewCellContentView:0x7f856b16bfa0.bottomMargin == UITextField:0x7f856b16c4f0.bottom>",
    "<NSLayoutConstraint:0x7f856b174520 V:[UIButton:0x7f856b16a510'+(null)']-(8)-[UITextField:0x7f856b16c4f0]>",
    "<NSLayoutConstraint:0x7f856b182a10 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f856b16bfa0(66)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f856b169650 V:[UIButton:0x7f856b16a510'+(null)'(50)]>

實際上看起來寬度是由

- (CGSize)intrinsicContentSize {
    return CGSizeMake(320, 66);
}

如果未設置內部內容大小,則不會獲得任何寬度或高度。

編輯:它絕對是兩個高度限制。 嘗試刪除一個或降低優先級。

AutoresizingMask on =允許此視圖的父級設置適當的蒙版。

AutoresizingMask off =不允許此視圖的父級設置適當的蒙版。 我想自己做。

如果在IB中創建視圖,則默認情況下將其autoresizingMask設置為No。

如果在代碼中創建視圖,則默認情況下將其autoresizingMask設置為Yes。

關閉AutoresizingMask時會得到一個不全寬的單元格(或實際上任何行為更改),這意味着該單元格或表的父級(在視圖層次結構中)很可能接管並設置了約束(這不是事實)你要)。

現在,我認為您得到這個不全寬的單元格的原因是,當在視圖元素之間拖動以設置約束時,IB中令人討厭的默認設置,而不是將約束綁定到頂部,底部等。 IB將其綁定到邊距(不同)。

因此,您需要從“文檔大綱”中選擇約束:

文件大綱

然后逐一選擇與邊界相關的約束:

約束已關閉

並確保未選中“相對於邊距”。

約束打開

如果使用IB右下角的“摘要約束”選項卡(從左數第二個),則在創建約束時可以取消選擇“約束到邊距”:

約束摘要

選擇約束

我對此有類似的問題:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

它向我扔了一條有關“無法滿足約束條件”的日志,但是沒有任何約束條件誤導,因此我添加了estimatedHeightForRowAtIndexPath:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

它固定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM