在自动布局中隐藏 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
我有一个选择器视图,当用户从选择器视图中选择某个值时,我想将某些文本视图和标签一起隐藏:
[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
}
我也试过
这取决于您的观点是如何布局的。我会建议 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