自上漿的UITableViewCell:MyTableViewCell.m如何使用自動佈局動態更改UITableViewCell的高度?
-(void) viewDidLoad{
UIView *sample = [[UIView alloc] init];
[self.contentView addSubview: sample];
//Fake code here. Let sample view fill the whole contentView:
Constraint1: sample.leading = contentView.leading;
Constraint2: sample.trailing = contentView.trailing;
Constraint3: sample.top = contentView.top;
Constraint4: sample.bottom = contentView.bottom;
Constraint5: sample.height = 20;
NSLayoutConstraint:activateConstriant(constraints 1-5);
}
此代碼工作和MyTableViewCell
有20
的高度。然而,我想改變在運行時的高度(在這個單元格添加到UITableView之後),所以我添加了一個新方法到MyTableViewCell.m
-(void) updateHeight:(CGFloat)newHeight{
//Fake code here. change the constant of constraint1
Constraint1 = get reference of Constraint1 in viewDidLoad();
Constraint1.constant = newHeight
}
我運行代碼和呼叫updateHeight:10
並得到了日誌警告:
2017年3月16日16:23:11.102858 [14541:568021] [LayoutConstraints]無法同時滿足約束。 以下列表中的至少一個約束可能是您不想要的。 試試這個: (1)看看每個約束,並試圖找出你不期望的; (2)找到添加不需要的約束或約束並修復它的代碼。 ( 「」, 「」, 「」, 「」 ) 將嘗試打破約束,以恢復
我自己的看法是,我限制在viewDidLoad
創建自動創建幾個其他的限制像contentView.height=20
和我對原始約束的更改與系統創建的約束衝突。
我測試過更改樣本視圖的領導而不是updateHeight:
的高度,它的工作原理!因爲領先的變化不會影響contentView自身的身高限制嗎?
我該如何動態改變自動佈局,像這種情況?
謝謝~~~
嘗試'sample.translatesAutoresizingMaskIntoConstraints = NO'。通常情況下,這解決了這個問題。 – Rikh
你最終發現了嗎?這裏的所有答案都是初始化,而不是隨時更新,這是你(和我)需要的。任何發現? – Lapidus