【问题标题】:Hiding UITextView and UILabels in Autolayout在自动布局中隐藏 UITextView 和 UILabel
【发布时间】: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 ,但仍然没有运气。 我需要同时隐藏标签和文本视图。

【问题讨论】:

    标签: ios objective-c autolayout uitextfield uilabel


    【解决方案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

        【讨论】:

          猜你喜欢
          • 2014-05-25
          • 1970-01-01
          • 2014-01-11
          • 2014-11-17
          • 1970-01-01
          • 2016-08-25
          • 1970-01-01
          • 2017-05-16
          • 2015-04-27
          相关资源
          最近更新 更多