在自动布局中隐藏 UITextView 和 UILabel
Posted
技术标签:
【中文标题】在自动布局中隐藏 UITextView 和 UILabel【英文标题】:Hiding UITextView and UILabels in Autolayout 【发布时间】:2015-07-08 08:09:08 【问题描述】:我有一个选择器视图,当用户从选择器视图中选择某个值时,我想将某些文本视图和标签隐藏在一起:
[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
我尝试了 this solution 更改优先级和 this solution ,但仍然没有运气。 我需要同时隐藏标签和文本视图。
【问题讨论】:
【参考方案1】:这样设置约束
那么它在 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];
];
那么出口约束就是这个
【讨论】:
【参考方案2】:这取决于您的视图是如何布局的。我建议两种方法:
1) 将每对 textView + label 包装在一个 wrapperView 中。将 IBOutlet 设置为每个包装 viewView 的高度约束。然后你可以像这样隐藏行:
wrapperView2HeightConstraint.constant = 0;
[wrapperView2 layoutIfNeeded];
您可能需要设置 wrapperView1.clipsSubviews = YES;
以便实际上隐藏子视图。
2) 另一种方法是使用UITableView
并将每一对放在UITableViewCell
中。然后您可以轻松地操作隐藏在[tableView reloadData];
上的单元格。甚至还有一个内置动画。
【讨论】:
【参考方案3】:如何将 textField 和 Label 的标签设置为 textfield 的标签,以 1,2 开头,很快,Label 标签设置为 51,52 等等。这样他们就有 50 b/w 的差异。你可以设置它们 label.hidden 和 textview.hidden
【讨论】:
以上是关于在自动布局中隐藏 UITextView 和 UILabel的主要内容,如果未能解决你的问题,请参考以下文章
带有 UITextView 的 UITableViewCell 中的自动布局
使用故事板、自动布局和 Swift 的多行 UILabel 和 UITextView
UIScrollView 中的 UITextView 使用自动布局