在自动布局中隐藏 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 使用自动布局

使用自动布局的 UITableView 中的动态 UITextView 高度?

UITextView 使用自动布局自动调整大小

iphone 始终在 UITextView 中隐藏一些文本