![](/img/trans.png)
[英]How to add custom UIView(xib) in custom UITableviewCell with the help of AutoLayout?
[英]How to make autolayout work with custom UIView on XIB?
我在XIB上有一個UIView
,其中包含一個UIImageView
和一個UILabel
,兩者之間有一個很小的空間。 水平布局是簡單鏈接的|--image--label--|
其中--
是一些固定的空間。 高度固定為40,此視圖在其視圖控制器中水平居中,並且寬度限制>=
100。
如果更改標簽文本,則組合視圖的寬度將按照其標簽更改后的寬度的預期寬度進行更新,並且它將很好地保持在視圖控制器的中心。
因為我需要在其他地方包含圖像和標簽的UIView
,所以我創建了一個包含XIB和Swift文件的自定義類。 我們稱之為ItemView
。
我遇到的問題是視圖控制器XIB上的空UIView
(我已將類更改為ItemView
)不再接受>=
40寬度約束。 當然,這是因為該視圖控制器XIB不再看到可變寬度UILabel
,而是只是一個普通UIView
類的ItemView
。 我收到“不平等約束歧義” IB錯誤。
結果是我的自定義視圖的寬度保持為40。如果我指定更大的> =標簽寬度,它會起作用。 然后,僅在達到此寬度時才截取文本。 但是在第二種情況下,我的自定義視圖不再水平居中,而是向左移動了一點。
我該如何解決? 或者,如何告訴IB以與UILabel
類似的方式對待我的自定義ItemView
?
在我的ItemView
我已經找到了所有可以找到的東西:
override class var requiresConstraintBasedLayout: Bool
{
return true
}
設置標簽文本后,調用setNeedsLayout()
。
調用myLabel.translatesAutoresizingMaskIntoConstraints = false
。
調用self.translatesAutoresizingMaskIntoConstraints = false
。
並在兩個init()
中都調用self.setNeedsUpdateConstraints()
。
我如何構造自定義UIView
:XIB的文件所有者是ItemView
。 ItemView
有一個@IBOutlet var: UIView!
連接到XIB中的視圖。 然后我有:
init()
{
super.init(frame: .zero)
self.initView()
}
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
self.initView()
}
private func initView()
{
Bundle.main.loadNibNamed("ItemView", owner: self, options: nil)
self.view.frame = CGRect(x: 0.0, y: 0.0, width: self.width, height: self.height)
self.addSubview(self.view!)
}
(我似乎在使用XIB創建自定義UIView
時需要額外的UIView
。很想知道是否不需要它。)
為了使其正常工作,我需要在更新標簽后調用self.invalidateIntrinsicContentSize()
。 並覆蓋intrinsicContentSize
:
override open var intrinsicContentSize: CGSize
{
return self.view.systemLayoutSizeFitting(self.bounds.size)
}
請注意,我是在self.view
而不是self
上調用它。
感謝@matt為我指出正確的方向。 這是我第一次遇到這樣的事情。
我嘗試了以下所有步驟,我們都沒有必要:
override class var requiresConstraintBasedLayout: Bool
{
return true
}
設置標簽文本后,調用setNeedsLayout()
。
調用myLabel.translatesAutoresizingMaskIntoConstraints = false
。
調用self.translatesAutoresizingMaskIntoConstraints = false
。
並在兩個init()
中都調用self.setNeedsUpdateConstraints()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.