【问题标题】:how to make a constant value adaptive in xcode IB如何在 xcode IB 中使常数值自适应
【发布时间】:2015-03-27 01:40:13
【问题描述】:

以下图为例,顶部红色矩形的宽度固定为200,底部红色矩形的宽度被限制为屏幕宽度的一半。我需要的是根据屏幕大小调整 200 的大小。在这里,常数可以是固定的宽度/高度,或水平/垂直空间。

example image

我可以通过@"H:[redView(%d)]"、@"V:[redView(%d)]" 以编程方式执行此操作,我可以计算自适应宽度和高度。有时当布局复杂时,以编程方式进行布局太繁琐了。

所以我的问题是如何在 IB 中做到这一点

类似问题:

(1) @"H:|-5-[view]-5-|",我需要 5 来适应不同的设备

(2)@"H:|[view(100)]|",我需要100自适应

(3) @"H:|[v1]-0-[v2]-0-[v3]|",我需要 v1 : v2 : v3 = 3: 5 : 2

如何在IB做事,任何回答都会有很大帮助,谢谢大家

我现在有一个解决方案,我可以将需要自适应的约束从 IB 拖到代码中的 IBOutlet 中,然后以编程方式分配它,这样,大部分事情都可以在 IB 中完成。但它仍然不聪明,有没有聪明的。

【问题讨论】:

    标签: ios xcode autolayout autoresize


    【解决方案1】:

    你可以像下面这样得到屏幕宽度

    CGFloat width = [UIScreen mainScreen].bounds.size.width;
    

    然后设置框架。例如

    yourUIView.frame = CGRectMake(x coordinate, y coordinate, width, height);
    

    【讨论】:

      【解决方案2】:

      对于您的红色框,控制从红色框拖动到其包含视图(这可以在文档大纲视图中轻松完成)。从弹出窗口中选择 Equal Widths 和 Equal Heights 约束。将乘数编辑为百分比(例如 0.6 表示 60%)。

      以类似的方式,您可以使用带乘数的 Equal Widths 来解决其他 3 种情况:

      (1) 添加约束以使视图在其包含视图中水平居中,然后使视图为其包含视图宽度的 97%。

      (2) 使用乘数为 0.3 的等宽。

      (3) 使用等宽使 v1 为 v2 的 0.6,v3 为 v2 的 0.4。将 v1 固定到 superview 的前沿,偏移量 0。将 v1 固定到 v2,偏移量 0。将 v2 固定到 v3,偏移量 0。将 v3 后沿固定到 superview,偏移量 0。

      【讨论】:

      • 非常感谢。你解决了我的问题。你的观点是避免直接按百分比或纵横比分配常量值,我明白了。
      • 现在,我正在使用另一种方法,在我程序的根视图中,我缩放 [rootview 约束] 中每个约束的常量变量,然后 dfs [rootview 子视图]。但它导致了另一个我没有处理的布局问题。也许重新表达我所有的观点会好得多。再次感谢。
      • @"H:|-5-[v1]-5-[v2|-5-|" 怎么样?我需要 5 来适应吗?谢谢
      • 这是一个棘手的案例。您可以在那里做的是添加视图以占用空间。我们称它们为sp1sp2sp3。将它们的颜色设置为clear。在sp1sp2 之间设置等宽。在sp1sp3 之间设置等宽。将 v1 的宽度设置为 superview 的 0.475,v2 的宽度相同。确保将所有视图固定在一起,偏移量为 0,包括间隔视图。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 2019-02-06
      • 2016-12-02
      • 2012-03-06
      • 2014-07-01
      相关资源
      最近更新 更多