【问题标题】:Hide or show one view with constraint on it隐藏或显示一个有约束的视图
【发布时间】:2015-04-06 06:51:04
【问题描述】:

我有一个带有两个子视图 viewA 和 viewB 的 ViewP。 viewA 始终存在,但 viewB 在某些情况下应该看不到。 所有这些视图都是从 xib 加载的。

我的问题是,如何根据 viewA 的高度 + ViewB 的高度来更新 viewP 的高度。如果 ViewB 是隐藏的,如何通过几个简单的代码来更新 viewP 的高度,而不是通过硬代码来更新框架。

首先,我只是将 viewB 设置为隐藏。但是viewP不能更新自己。

我已经搜索过了,得到了一种方法来调整视图的两个高度约束的优先级。一个高度为 0,另一个高度为 46,但是当我通过代码更改它们的优先级时。看起来它不适合我。

【问题讨论】:

  • 你熟悉 AutoLayout 吗?
  • @Azat,不多说了,开始用吧
  • 我可以在 XIB 文件中进行更改(如隐藏或显示),但我只想通过代码进行更改,因为有几种不同的条件。
  • 您只需正确设置约束并将IBOutlet 连接到其中一个(我猜是您的视图的高度),以便能够从代码中更改其值
  • @Azat 我已经这样做了,我连接了两个约束 IBOutlet 属性,因为在隐藏的情况下,我只希望 0-heigh 约束会生效;在展示的情况下,我只希望 46 高的约束会起作用。所以我在代码中更改了它们的优先级,在 250、750 值之间切换。对我不起作用。

标签: ios constraints


【解决方案1】:

如果你是 Autolayout 的新手,我推荐这个框架。主要作品为文字艺术,简单明了。你可以在github上找到它。

回到你的问题。 您可以使用 QuickVFL API 来做到这一点:

/**
 *  Control the visibility of the view.
 *
 *  @param visible   whether show the view
 *  @param vertically whether vertically, or horizontally
 */
-(void)q_setVisibility:(BOOL)visible isVertically:(BOOL)vertically;

例如:

[anyViewInstance q_setVisibility:NO isVertically:YES];

内部职位:

  1. 添加约束以限制目标小部件的宽度或高度(取决于 isVertical)。
  2. 将约束的常量值设置为0
  3. 将约束的优先级设置为 1000(最高)
  4. 如果任何其他约束使宽度或高度大于0,则其优先级必须低于1000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多