在自动布局中隐藏 UITextView 和 UILabel

Hiding UITextView and UILabels in Autolayout

我有一个选择器视图,当用户从选择器视图中选择某个值时,我想将某些文本视图和标签一起隐藏:

[label1] [----textview1----]

[label2][----textview2----]

[label3][----textview3----]

所以我想要的是:

if (picker value is equal to "someValue")
{
 - hide label 2 and textview 2
 - shift label 3 and text view 3 to be positioned below label 1 and textview1
}

我也试过 where I change priorities and this solution 但还是不行。 我需要同时隐藏label和textview。

这取决于您的观点是如何布局的。我会建议 2 种方法:

1) 将每对 textView + label 包装在一个 wrapperView 中。将 IBOutlet 设置为每个包装器 viewView 的高度约束。然后你可以像这样隐藏行:

wrapperView2HeightConstraint.constant = 0;
[wrapperView2 layoutIfNeeded];

您可能需要设置 wrapperView1.clipsSubviews = YES; 以便实际上隐藏子视图。

2) 另一种方法是使用 UITableView 并将每对放在 UITableViewCell 中。然后,您可以轻松地操纵 [tableView reloadData]; 上隐藏了哪些单元格。甚至还有内置动画。

像这样设置约束

然后gif里面的样子

代码 保留 3 属性

@property (weak, nonatomic) IBOutlet UILabel *secondLabel;
@property (weak, nonatomic) IBOutlet UITextField *secondTextfield;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *toChangeConstraint;

然后隐藏

  self.secondLabel.hidden = true;
self.secondTextfield.hidden = true;
self.toChangeConstraint.constant = -20;
[UIView animateWithDuration:0.5 animations:^{
    [self.view layoutIfNeeded];
}];

那么出口约束就是这个

你把textField和Label的tag设置成textfield的tag以1,2开头,然后Label tag设为51,52等等。这样他们就有 50 b/w 个差异。你可以设置它们 label.hidden 和 textview.hidden