我有一个视图,其中有一个 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
  • 设置btnBaseViewbottomView相关的底边距约束
    成为>= 0


  • 然后您更改数据对应的tblFilters的高度约束
    tableHeightConstraints.constant = someValue
    view.layoutIfNeeded()
    

    09-12 03:17