【问题标题】:Remove UIView from superview programmatically (autolayout)以编程方式从超级视图中删除 UIView(自动布局)
【发布时间】:2014-05-31 14:55:19
【问题描述】:

我有一个UIViewController,其中包含主要的UIView,其中顶部是一个小的UIView,其余的空间是一个UITableView

所有的设计都是用Storyboards和autolayout完成的,所以上面UIView基本上有这些限制:

  • 顶部空间 = 0px 到超级视图
  • 前导空间 = 0px 到超级视图
  • 尾随空格 = 0 px 超级视图
  • 高度 = 44 像素

这些为UITableView

  • 顶部空间 = 0px 到 UIView
  • 底部空间 = 0px 到超级视图
  • 前导空间 = 0px 到超级视图
  • 尾随空格 = 0 px 超级视图

当使用不同的屏幕尺寸或方向时,一切正常并正确调整大小。我现在要做的是以编程方式删除顶部UIView,然后我希望UITableView 将空间填充到超级视图的顶部。

我知道我可以以编程方式为UITableView 创建一个新约束,但我正在寻找的是低优先级约束?已在 Storyboard 中定义,可以与之前已定义的内容共存。

任何其他技巧或解决方法也将不胜感激,唯一的限制是一切都应该在情节提要中设计,并且一切都应该在调用后工作:

[view removeFromSuperview];

这是设计:

【问题讨论】:

  • 顶视图一定要去掉吗?如果不是,您可以将顶视图的高度更改为 0(零)的动画,或者您可以将顶视图的顶部约束常数从 0 更改为 -44 的动画,这将使视图从屏幕顶部滑出。在任何一种情况下,表格视图都应该占用“额外”空间,并且会以动画方式启动!

标签: ios objective-c uitableview uiview autolayout


【解决方案1】:

从超级视图中删除顶视图后,只需更新 tableview 的框架以填充整个窗口

【讨论】:

    【解决方案2】:

    您只需要添加另一个顶部约束,一个到顶部布局指南,然后将其编辑为优先级为 900,常量值为 0。如果您已经有顶部视图,您将必须从下视图拖动到左侧列表中的主视图,因为您将无法访问画布中的主视图。

    【讨论】:

      【解决方案3】:

      这很简单,因为您已经对顶部 UIView 进行了高度约束,并在顶部视图和表格视图之间进行了垂直空间约束。

      在各自的实现 (.m) 类中创建高度约束的实例。

      @property(强,非原子)IBOutlet NSLayoutConstraint *topViewHeightConstraint

      然后当你不想要顶视图时,写 topViewHeightConstraint.constant = 0.f

      由于您已经在顶视图和表格视图之间进行了垂直空间限制,因此表格视图将占据超级视图的整个空间。

      当您再次想要顶视图时,只需设置约束值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-23
        • 2012-12-25
        • 1970-01-01
        相关资源
        最近更新 更多