【问题标题】:Small layout adjustments for iPhone 6/plus etciPhone 6/plus 等的小布局调整
【发布时间】:2015-02-17 00:00:01
【问题描述】:

我在情节提要中设置布局以根据屏幕尺寸动态调整。

除其他外,我将图像设置为与超级视图的大小成比例(使用 0.9 常量匹配宽度和高度)。现在,在 iPhone 6 和 6 plus 上,图像看起来有点太大了。所以对于这些屏幕,我想将常数设置为 0.8。也许我也想设置一个更大的字体大小。

到目前为止,我读到的尺寸等级不适用于此,因为所有 iPhone 肖像只有 1 个等级。而且我不会仅仅为了改变一个常数而创建一个新的故事板......

有没有办法在故事板中做到这一点?还是我必须以编程方式检查屏幕尺寸(:()?

如果以编程方式进行是唯一的方法,那么推荐的方法是什么?

【问题讨论】:

  • 可以不设置宽高,而是针对不同的尺寸等级设置 trailing/bottom 属性,并设置相应的常量。
  • 但据我所知,正如我所写,尺寸类不适用于此。没有办法区分例如iPhone 5 纵向和 iPhone 6 plus 纵向使用尺寸等级。
  • 一个想法:如果您担心图像变得太大,那么您是否尝试过添加宽度约束(例如宽度
  • 是的,然后没有其他 go ,而是代码。您必须检查代码或机器版本(5,6 等)中的比例因子。可能正在使用 #Define 并放置 if_else 块。如果您使用 swift,您可以覆盖某些运算符以在上述条件下取两个值。
  • 为什么说它看起来太大了?可能有一种方法可以在数学上表达您对图像大小的标准是什么...您能对此更具体吗?

标签: ios autolayout


【解决方案1】:

如果您可以使用恒定值定义最大宽度(和/或高度),则可以使用“小于或等于”值设置更高优先级的约束。因此,如果看起来不错的最大宽度约为 315,则使“等宽 * 0.9”约束的优先级低于“小于或等于 315”的约束。

2) 如果以编程方式使用布局约束,最好的方法是在 View Controller 的 updateViewConstraints 中进行更新。有几种技术,但对这些要求最简单的是“默认和低优先级非默认”。

  1. 在 IB 中为“默认”行为创建约束,然后在 IB 中为非默认行为创建矛盾约束。将矛盾的约束设置为较低的优先级。这应该会在您执行此操作时产生警告,但最后没有警告,只有一些虚线约束。
  2. 为视图控制器的默认约束创建出口。将它们称为“pictureDefaultWidthConstraint”和“pictureDefaultHeightConstraint”。
  3. 在 View Controller 的updateViewConstraints 中,根据所需的行为设置默认约束为活动或不活动:

    -(void)updateViewConstraints {
    
    BOOL useDefaultSizes = YES;
    if (self.view.frame.size.width > 320) {
        useDefaultSizes = NO;
    }
    
    self.pictureDefaultWidthConstraint.active = useDefaultSizes;
    self.pictureDefaultHeightConstraint.active = useDefaultSizes;
    
    [super updateViewConstraints];
    }
    

当然,当默认约束设置为非活动时,优先级较低的非默认约束会启动。您可以设置其他条件,例如级联系列默认值。将其保持在基于布尔编程测试激活的一系列约束条件下,使其可测试且简单明了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    相关资源
    最近更新 更多