【问题标题】:UIView expand but not overlapUIView 展开但不重叠
【发布时间】:2014-12-15 21:36:27
【问题描述】:

我有一个简单的设计问题,但似乎找不到最简单的答案。

假设有 10 个 UIView 从上到下对齐,没有重叠。如果我想扩大其中一个的高度,如何移动其他的,以免发生重叠?

这是我的三个想法,很想听听你的:

  1. 计算每个视图的原点 y。我觉得很乱。
  2. 使用表格视图。解决一个简单的问题似乎很复杂。也许老派,因为表格是 html 中的老派。但更干净。
  3. 对所有视图使用约束。看起来简单干净,但使用起来可能有点复杂?

我忘记了什么明显的事情吗?

问候

【问题讨论】:

    标签: objective-c xcode uiview


    【解决方案1】:

    出于以下几个原因,我当然会选择 (3):

    • 灵活性 - 字面意思:您将能够描述您想要发生的事情,并让 AutoLayout 处理细节计算。
    • 灵活性 - 形象地说:您不必(太多)担心您的应用程序在各种不同的设备上正确显示。

    是的,有时使用 AutoLayout 可能会更复杂一些,尤其是在开始时,但我向您保证:从长远来看,这是值得的。

    这里有一些代码可以帮助您入门。以下约束适用于 5 个视图。第一个UIView 的高度将大于或等于myViewHeight,下面定义为20。随后的4 个视图将等于myViewHeight

    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_myView(>=myViewHeight)][_myView(==myViewHeight)][_myView(==myViewHeight)][_myView(==myViewHeight)][_myView(==myViewHeight)]-|"
                                                               options:0
                                                               metrics:@{@"myViewHeight": @20}
                                                                 views:NSDictionaryOfVariableBindings(_myView)]];
    

    【讨论】:

    • 谢谢。你的例子似乎很简单。我会在有限制的情况下试一试。符号“V:”是什么意思?
    • @Nam 这是 AutoLayout 的视觉格式语言。 Here 是一篇很好的文章,尽管 Apple 也有很多关于它的文档 here
    • @Nam 另外 - 上述约束没有考虑宽度。为此,您将需要更多约束。祝你好运!
    • 谢谢贾里德!我也对是否有其他可以使用的设计模式感兴趣,请随时添加您的评论。
    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多