iOS UITableView設置tableHeaderView時發生約束錯誤 UIView-Encapsulated-Layout-Height UIView-Encapsulated-Layout-Width


 

 

在將UITableViewtableHeaderView設置為我自己創建的View的時候,

當我為這個自定義View添加約束之后啟動調試,

然后符號斷點UIViewAlertForUnsatisfiableConstraints命中了,

終端輸出了如下的報錯信息:

(
"<SnapKit.LayoutConstraint:0x1702a64e0@MAskDetailVC.swift#120 UIView:0x1017eb5e0.height == 211.666666666667>",
"<NSLayoutConstraint:0x170682760 'UIView-Encapsulated-Layout-Height' UIView:0x1017eb5e0.height == 212 (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x170682760 'UIView-Encapsulated-Layout-Height' UIView:0x1017eb5e0.height == 212 (active)>

  

 

這其實是CollectionView為你的自定義View自動添加了其他約束

然而它添加的約束你添加的約束優先級是相同的。

 

所以解決問題的關鍵就是將你設置的約束的優先級降低

 

 

 

解決方案參考:

 

一、如果你使用了UIKit提供的API來設置約束,可以參考如下OC代碼:

NSArray * collectionConstraints_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_collectionview]-0-|" options:0 metrics:nil views:viewsDic];
[self addConstraints:collectionConstraints_V];

NSArray * collectionConstraints_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-103-[_collectionview]" options:0 metrics:nil views:viewsDic];
[self addConstraints:collectionConstraints_H];

NSLayoutConstraint * constraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[_collectionview]-0-|" options:0 metrics:nil views:viewsDic].firstObject;
constraint.priority = UILayoutPriorityDefaultLow;

[self addConstraint:constraint];

  

 

二、如果你使用了SnapKit來設置約束,可以參考如下Swift代碼:

askContainer.snp.makeConstraints { (m) in
    m.top.equalTo(detailTV.snp.top)
    m.leading.equalTo(detailTV.snp.leading)
    m.width.equalTo(SCREEN_WIDTH)
    let height = m.height.equalTo(height).constraint
    height.layoutConstraints.first?.priority = UILayoutPriorityDefaultLow
}

  

 

 

參考資料:http://blog.csdn.net/hello_hwc/article/details/47129711

 

 


轉載請注明出處:http://www.cnblogs.com/ficow/p/7250330.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM