我有一个视图,其中有一个 UILabel ,一个 UITableView (tblFilters
)和一个 UIView (btnBaseView
)(以保留其他三个UIButton)。请检查以下图像:-
我需要扩展tblFilters
的高度以展示每个类别的选项,但需要使btnBaseView
始终在屏幕上可见。因此,基本上tblFilters
的高度不应超过限制。
为此,我对btnBaseView
应用了高度限制并将其设置为必需的优先级。以同样的方式tblFilters
具有高度限制,但默认为高优先级。
// Height Constraint of btnBaseView. Height Should always be >=116
btnSectionHeightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnBaseView(>=116)]" options:0 metrics:nil views:@{@"btnBaseView":btnBaseView}];
[[btnSectionHeightConstraint firstObject] setPriority:UILayoutPriorityRequired];
[self addConstraints:btnSectionHeightConstraint];
// TableView Height Constraint. Height value is being changed when user click on "+" button of table section.
tableHeightConstraints = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:[tblFilters(>=%f)]",176.0] options:0 metrics:nil views:@{@"tblFilters":tblFilters}];
[[tableHeightConstraints firstObject] setPriority:UILayoutPriorityDefaultLow];
[self addConstraints:tableHeightConstraints];
但是这种方法似乎不起作用,因为tableView覆盖了整个baseView并将
btnBaseView
推到了可见区域之外。我已经尝试通过将DefaultLow优先级保持为
tblFilters
来执行,但没有任何效果。当我在更改tblFilters
高度约束后调试代码时,它将在控制台中打印正确的优先级输出,但对视图没有影响。有人可以帮助我确定为什么约束优先级未按预期工作的问题,或者我对这个概念有错误的理解。任何帮助表示赞赏。
最佳答案
tblFilters
高度限制优先级设置为UILayoutPriorityDefaultHigh
btnBaseView
相关的tblFilters
上边距约束为0
btnBaseView
与bottomView
相关的底边距约束成为
>= 0
然后您更改数据对应的
tblFilters
的高度约束tableHeightConstraints.constant = someValue
view.layoutIfNeeded()