【问题标题】:iOS Autolayout: Is the Size Constrains for UIView is Obligatory?iOS 自动布局:UIView 的大小约束是强制性的吗?
【发布时间】:2016-03-05 14:49:03
【问题描述】:

我正在尝试通过 Interface Builder 使用约束来安排情节提要中的控件(“任何宽度,任何高度”案例)。我在那里添加了 UIView,但是,当我根据给定的约束按下此元素的更新框架(选定视图的情况)时,UIView 从我的视图中消失了。我猜它的大小变为零。后来,它在运行后不会显示在屏幕上。问题导航器中也报告了该问题: UIView 的水平位置不明确(以绿色形状标记)。无论如何,如果我将宽度或高度(尺寸参数)的约束与比率的约束一起设置,那么问题就会消失,我可以更新帧,它会在运行期间显示在屏幕上。

我正在添加带有绿色标记的图片以使问题更清楚:

  1. 问题是当我设置约束时,尺寸参数是否是强制性的。
  2. 即使它们是强制性的,我如何才能使尺寸适合不同尺寸的屏幕或 iPhone+iPad,因为如果我设置/修复尺寸,它可能对于某些屏幕来说太大了。

【问题讨论】:

    标签: ios uiview autolayout constraints uistoryboard


    【解决方案1】:

    大小不是强制性的。警告告诉您必须为此视图设置一个 X 位置(superView 左或右边框与视图本身的左/右边框之间的约束)。如果您希望视图自行调整大小以适应每个屏幕尺寸,您必须同时设置左右约束而不设置尺寸约束。

    【讨论】:

    • 但是如果我不设置尺寸约束,那么我无法更新帧而不丢失它。
    • 注意:如果在一个视图上设置约束,则必须对所有视图都这样做(尽管视图控制器的主视图)。此外,关于模糊约束的警告也很重要——不要忽视它们。
    【解决方案2】:

    当屏幕尺寸改变时,你不应该使用固定尺寸(宽度或高度)来改变尺寸。

    如果您想要固定纵横比的视图,您可以使用以下方法设置相对于 Superview 宽度或高度的大小:

    1) 前导和尾随并确保

        view.leading = superview.leading + fixed_margin
        view.trailing = superview.trailing - fixed_margin
    

    而不是其他方式。

    2) 等宽或等高,乘数,根据你的需要相对于超级视图保持不变

    所以你不需要邪恶的尺寸等级。

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 2015-10-16
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多