【问题标题】:Programmatically remove UILabel that has autolayout from View以编程方式从视图中删除具有自动布局的 UILabel
【发布时间】:2023-03-07 16:19:01
【问题描述】:

我解析 Json 数据并将其设置在一些 UILabel 上,我想要的是当特定标签没有文本时它必须从 UIView 中删除,我尝试了 2 种方法但没有结果,因为标签有约束。 我尝试的是:

将它们的框架设置为 0,将高度限制设置为 0

CGRect noFrame = _prepTime.frame;

noFrame.size.width = 0;
noFrame.size.height = 0;
[_prepTime setFrame:noFrame];
prepTimeHeight = 0;

但是 UILabel 的高度仍然存在,

我试过的:

[_prepTime removeFromSuperView];

有了这个,UILabel 会被移除,但界面会发生变化,因为它有约束,并且通过移除 UILabel 我会破坏布局。

是否有任何方法可以从视图中移除 UILabel,即使它有约束?

【问题讨论】:

    标签: objective-c uilabel


    【解决方案1】:

    如果不想影响其他所有子视图,可以设置hidden

    【讨论】:

      【解决方案2】:

      使用布局约束时,编辑元素的框架不是一个好主意。相反,您应该为您的NSLayoutConstraint 添加一个IBOutlet property 并将其链接到情节提要中标签的高度约束,然后编辑NSLayoutConstraint 的常量值。

      在你的 viewcontroller @implementation 中有类似的东西:

      @property IBoutlet NSLayoutConstraint *myLabelHeightConstraint;
      

      当你想隐藏你的标签时:

      self.myLabelHeightConstraint.constant = 0;
      [self.view layoutIfNeeded];
      

      【讨论】:

      • 试过了,但高度仍然存在
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多