【问题标题】:Xcode AutoLayout, Make Margin proportional with heightXcode AutoLayout,使边距与高度成比例
【发布时间】:2015-09-13 11:33:26
【问题描述】:

我很想弄清楚如何使两个对象的边距成比例。如果我在 Xcode 上选择纵横比,它会给我调整对象比例屏幕高度的选项。那不是我的情况。我希望按钮和屏幕底部之间的边距与屏幕高度成正比。我希望它使用 Xcode "No Code" 来完成。

非常感谢您的支持。

谢谢

【问题讨论】:

  • 使用完成按钮和底部之间的透明视图创建边距。将视图固定到侧面、完成按钮和底部。现在根据你想要的 iPhone 4 的高度给它一个纵横比约束。虽然不完美,但它会随宽度缩放,通常与高度的比例相同。因此,如果您将 apsect 设置为 iPhone 4 上的 100 高,那么 iPhone 5 上为 100,iphone 6 上为 117,iphone6+ 上为 129,iPad 上为 240。所以除了 iPhone 5,这给了你你想要的。
  • @RoryMcKinnel 有没有更清洁的“直接”方法?我觉得这是一种解决方法
  • @MostafaMohamedRaafat 干净的方法是 CTRL 将高度约束拖到控制器头文件中并创建一个 IBOutlet。然后在viewDidLoad 中将约束常量设置为屏幕高度的百分比。遗憾的是,IB 不支持相对于纵横比和相等宽度/高度之外的其他约束的计算约束。我的建议是使用您在代码中设置的高度约束来做到这一点。很容易做到。

标签: ios xcode autolayout


【解决方案1】:

使用 NSLayoutConstraint 的 multiplier 属性!

首先,使用您希望的乘数设置从您的视图到其父视图的等高约束。您可以使用 Ctrl + 从您的视图拖动到超级视图。

然后将另一个约束设置为 0,从您的视图顶部到父视图,并设置一个等宽约束,从您的视图到父视图的乘数为 1。

完成!

【讨论】:

  • 所以你的意思是这样做的唯一方法是关注高度而不是边距?
  • @itsji10dra,任务是设置与视图高度成比例的边距大小。
【解决方案2】:

添加透明视图并使其与高度成正比。用这个透明视图绑定你的完成按钮。 There你可以找到制作方法。

【讨论】:

    【解决方案3】:

    我知道您不需要代码,但我认为您最好使用高度限制。为边距添加高度约束,然后 CTRL 将其拖到头文件中以获得类似:

    @property (strong, nonatomic) IBOutlet NSLayoutConstraint *myMarginHeightConstraint;
    

    您需要一个包含屏幕高度分数的属性:

    @property CGFloat myHeightFraction;
    

    然后在 viewDidLoad 中添加这个。

    - (void)viewDidLoad
    {
      [super viewDidLoad];
    
      self.myHeightFraction = 0.1; // e.g to get margin at 10% of height
      myMarginHeightConstraint.constant = myHeightFraction * [[UIScreen mainScreen] bounds].size.height;
    
      ...
    }
    

    【讨论】:

    • 我不认为这是正确的,因为如果视图大小发生变化,这不会更新边距吗?例如。从纵向到横向。
    • @Paludis 这段代码只展示了想法,不包括旋转。当您进行旋转并根据方向创建了具有固定大小的约束时,您必须添加必要的旋转方法覆盖并根据需要调整约束。然后布局在下一个布局周期中处理其余部分。您还可以在 viewWillLayoutSubviews 中实施更改,其中也包括轮换。
    • @RoryMcKinnel,任务是设置与视图高度成比例的边距大小。
    • @adnako 最后我检查过,将边距设置为屏幕高度百分比的代码就是这样做的!
    • @RoryMcKinnel,是的,你是对的,它设置边距高度
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多