iOS 视图定位取决于使用约束的屏幕尺寸
iOS view positioning depending on screen size using constraints
我一直在阅读 documentation/tutorials 并尝试使用 Xcode 中的约束,仍然可以实现我需要的东西。
问题是我需要定位视图(标签、图像)并根据设备的屏幕尺寸垂直展开它们(现在关注 iPhone)。 css 等效项是使用带百分比的边距。
labels/images,图像不需要放大或缩小。
例如,我的界面生成器中有这个。
为了说明问题我从上到下做了如下约束:
- Top 图片的 "Vertical Space Constraint"(或 Top Space)到 "Top Layout Guide.Bottom" 的 63
- "Membership" 标签有 "Top Space" 个 32
- 成员资格 # 有 "Top Space" 的 16
- 白色视图的 "Top Space" 为 32,底部为 16
- imageview 有 "Top Space" of 32
- 标签有 "Top Space" 个 32
- 按钮有 "Top Space" 个 20
这个措施对于 iPhone6 是正确的。现在我一直在努力实现的是通过收缩约束值。我试过使用乘数但没有用(或者不知道如何正确使用它)。我尝试向 wAny hCompact 添加约束,但只适用于其中一个约束(顶部图像到顶部边距),所有其他约束都被覆盖了。
这就是它在 iPhone 6.
中的样子
这就是我希望它在 iPhone 4(3.5 英寸)中的样子。
提前致谢。
好的,所以在这种情况下,我会在相应的 ViewController 中输出 NSLayoutConstraints,然后我会在运行时根据屏幕大小开始操作它们,通常是在 viewWillAppear 或 viewDidAppear 中,对于你的情况,我会假设一些事实并向您展示一个小例子:
- 您希望顶部图像的顶部约束为视图总高度的 10%
- 您希望成员标签的顶部约束为视图总高度的 7%。
- 您希望成员散列的顶部约束为视图总高度的 5%。
- 您希望白色视图的顶部约束为视图总高度的 7%,底部约束为视图总高度的 5%。
- 您希望图像的顶部约束为视图总高度的 7%。
- 您希望标签的顶部约束为视图总高度的 7%。
您希望按钮的顶部约束为视图总高度的 6%。
所以基于这些假设我会做以下事情:
-(void)myLayOutMethod
{
//here you set the percentage of every constraint of the view .
CGFloat screenHeight = self.view.frame.height ;
CGFloat topImageConstraintValue = screenHeight/0.10f ;
CGFloat topMembershipLabelConstraintValue = screenHeight/0.07f ;
CGFloat topMembershipHashConstraintValue = screenHeight/0.05f ;
CGFloat topWhiteViewConstraintValue = screenHeight/0.07f ;
CGFloat bottomWhiteViewConstraintValue = screenHeight/0.05f ;
CGFloat topImageConstraintValue = screenHeight/0.07f ;
CGFloat topLabelConstraintValue = screenHeight/0.07f ;
CGFloat topButtonConstraintValue = screenHeight/0.06 ;
//now you start making changes to those constraints .
self.topImageConstraint.constant = topImageConstraintValue;
self.topMembershipLabelConstraint.constant = topMembershipLabelConstraintValue ;
self.topMembershipHashConstraint.constant = topMembershipHashConstraintValue ;
self.topWhiteViewConstraint.constant = topWhiteViewConstraintValue ;
self.bottomWhiteViewConstraint.constant = bottomWhiteViewConstraintValue ;
self.topImageConstraint.constant = topImageConstraintValue ;
self.topLabelConstraint.constant = topLabelConstraintValue;
self.topButtonConstraint.constant = topButtonConstraintValue ;
[self.view layoutIfNeeded];
}
当然,所有这些百分比都是虚拟值,您可以根据需要更改它们,另外,创建 NSLayoutConstraint 的出口与从任何其他 UIKit 控件创建出口相同,您只需找到约束并将其拖动到你的 class
我一直在阅读 documentation/tutorials 并尝试使用 Xcode 中的约束,仍然可以实现我需要的东西。
问题是我需要定位视图(标签、图像)并根据设备的屏幕尺寸垂直展开它们(现在关注 iPhone)。 css 等效项是使用带百分比的边距。
labels/images,图像不需要放大或缩小。
例如,我的界面生成器中有这个。
为了说明问题我从上到下做了如下约束:
- Top 图片的 "Vertical Space Constraint"(或 Top Space)到 "Top Layout Guide.Bottom" 的 63
- "Membership" 标签有 "Top Space" 个 32
- 成员资格 # 有 "Top Space" 的 16
- 白色视图的 "Top Space" 为 32,底部为 16
- imageview 有 "Top Space" of 32
- 标签有 "Top Space" 个 32
- 按钮有 "Top Space" 个 20
这个措施对于 iPhone6 是正确的。现在我一直在努力实现的是通过收缩约束值。我试过使用乘数但没有用(或者不知道如何正确使用它)。我尝试向 wAny hCompact 添加约束,但只适用于其中一个约束(顶部图像到顶部边距),所有其他约束都被覆盖了。
这就是它在 iPhone 6.
中的样子这就是我希望它在 iPhone 4(3.5 英寸)中的样子。
提前致谢。
好的,所以在这种情况下,我会在相应的 ViewController 中输出 NSLayoutConstraints,然后我会在运行时根据屏幕大小开始操作它们,通常是在 viewWillAppear 或 viewDidAppear 中,对于你的情况,我会假设一些事实并向您展示一个小例子:
- 您希望顶部图像的顶部约束为视图总高度的 10%
- 您希望成员标签的顶部约束为视图总高度的 7%。
- 您希望成员散列的顶部约束为视图总高度的 5%。
- 您希望白色视图的顶部约束为视图总高度的 7%,底部约束为视图总高度的 5%。
- 您希望图像的顶部约束为视图总高度的 7%。
- 您希望标签的顶部约束为视图总高度的 7%。
您希望按钮的顶部约束为视图总高度的 6%。
所以基于这些假设我会做以下事情:-(void)myLayOutMethod { //here you set the percentage of every constraint of the view . CGFloat screenHeight = self.view.frame.height ; CGFloat topImageConstraintValue = screenHeight/0.10f ; CGFloat topMembershipLabelConstraintValue = screenHeight/0.07f ; CGFloat topMembershipHashConstraintValue = screenHeight/0.05f ; CGFloat topWhiteViewConstraintValue = screenHeight/0.07f ; CGFloat bottomWhiteViewConstraintValue = screenHeight/0.05f ; CGFloat topImageConstraintValue = screenHeight/0.07f ; CGFloat topLabelConstraintValue = screenHeight/0.07f ; CGFloat topButtonConstraintValue = screenHeight/0.06 ; //now you start making changes to those constraints . self.topImageConstraint.constant = topImageConstraintValue; self.topMembershipLabelConstraint.constant = topMembershipLabelConstraintValue ; self.topMembershipHashConstraint.constant = topMembershipHashConstraintValue ; self.topWhiteViewConstraint.constant = topWhiteViewConstraintValue ; self.bottomWhiteViewConstraint.constant = bottomWhiteViewConstraintValue ; self.topImageConstraint.constant = topImageConstraintValue ; self.topLabelConstraint.constant = topLabelConstraintValue; self.topButtonConstraint.constant = topButtonConstraintValue ; [self.view layoutIfNeeded]; }
当然,所有这些百分比都是虚拟值,您可以根据需要更改它们,另外,创建 NSLayoutConstraint 的出口与从任何其他 UIKit 控件创建出口相同,您只需找到约束并将其拖动到你的 class