iPhone上通用故事板的约束

时间:2015-12-22 11:02:36

标签: ios objective-c constraints

我现在用不同的屏幕尺寸在iOS上遇到了一些限制。

我尝试使用google和stackoverflow来寻找解决方案,但我的英语似乎不够流利,无法找到答案。

我有4个按钮垂直对齐,第一个和最后一个按屏幕边缘约束(有点简单)。但我真的在努力克服2个中间按钮的约束。我无法找到一种方法让它们在每个尺寸的屏幕上与左右按钮等距离。

是否有一些简单而棘手的方法可以使这些约束正确?或者我做错了,我应该尝试以programmaticaly方式进行吗?

Constraints struggle

由于

6 个答案:

答案 0 :(得分:2)

在每个按钮的中间添加三个不可见的视图,使用约束使它们的宽度彼此相等,然后您的四个按钮将是等间距的。对于Y,那么你只需要将它固定在你想要的位置。

如果您只支持iOS 9及更高版本,请使用UIStackView

enter image description here

答案 1 :(得分:1)

这个问题的解决方案非常简单。这可以使用“间隔视图”的概念来解决。您必须在每个红色视图之间放置不可见的视图。在你的情况下你需要3。然后使他们的背景为清晰的颜色。 。 接下来,使它们的宽度相等,并将它们的边缘约束到该视图之前和之后的视图。然后,您可以定义红色视图的大小。 记住,不要给任何固定宽度的“清晰彩色视图”。它将由运行时确定。这将解决问题。如果需要更多信息,请告诉我。

以下是针对此解决方案的博文 http://adamdelong.com/fluid-layouts-with-auto-layout-size-classes-spacer-views-and-constraint-priorities/

这是YouTube的视频 https://www.youtube.com/watch?v=eSG-3-QpmWk&feature=youtu.be

答案 2 :(得分:1)

除了Tj3n对按钮之间视图的回答,你可以使用

  • 用于设置Axis: horizontalDistribution: equal spacing
  • 的UIStackView(iOS 9!)
  • 工具栏(取决于您对按钮的操作)以及工具栏项和它们之间的灵活空间

enter image description here

答案 3 :(得分:1)

为什么不上课? Apple在iOS 8中引入了自适应用户界面的概念,它依赖于自动布局和大小类的组合。

如果你不知道什么是大小类,有很多可用的教程,请找一个。

总结:Apple非常巧妙地删除了iphone和ipad的两个故事板,并为通用应用程序制作了一个故事板。不,你不必努力尝试应用满足所有屏幕尺寸的autolayout约束:)

以下是一些大小等级及其含义:) 常规宽度x常规高度----> iPad Potrait模式/ ipad横向模式 紧凑宽度x常规高度----> iPhone 6 plus,iPhone 6,iPhone 5s,iPhone 5,iPhone 4s potrait模式 紧凑宽度X紧凑高度----> iPhone 6,iPhone 5s,iPhone 5,iPhone 4s横向模式 常规宽度x紧凑高度----> iphone 6 plus横向模式。

您可以从故事板:)中选择要支持的大小类,并开始应用特定于每个大小类的约束(如中间的按钮),或者如果您有所有的通用的(如按钮固定到屏幕)大小等级。

您可以从各种大小的类中部署,删除,重用或删除约束。

总结:好友,如果你还没有使用尺寸等级,那么开始使用它的时间很长:)我相信2014年苹果WWDC会议上有一个精彩的视频。下载,观看,开始玩它。

快乐编码:)

答案 4 :(得分:0)

你可以使用方程来获得这种外观。 使用视图的尾随点来获取此信息。

View1.trailing = superview.trailing*(2.0f/9.0f)

View2.trailing = superview.trailing*(4.0f/9.0f)

View3.trailing = superview.trailing*(6.0f/9.0f)

View4.trailing = superview.trailing*(8.0f/9.0f)

如果你View1.width = superview.width*(1/9.0f),你可以达到你想要的效果。

这个问题有很多类似的解决方案。但基地正在使用尾随点。 也可以使用Views的centerX位置来完成。

View1.centerX = superview.trailing*(3.0f/15.0f)

View2.centerX = superview.trailing*(6.0f/15.0f)

View3.centerX = superview.trailing*(9.0f/15.0f)

View4.centerX = superview.trailing*(12.0f/15.0f)

答案 5 :(得分:0)

感谢LearneriOS的回答,我解决了我的问题。

为了得到我希望的结果,我创建了3个宽度为10的视图。

我的第一个和最后一个按钮已被限制。我将我的第一个额外视图限制为我的第一个水平间距按钮,然后我在容器中垂直限制了我的第一个额外视图。然后我将额外的视图限制在他自己的宽度和高度上。

重要的是:我确实进入了约束菜单并选择了宽度约束。里面的值仍然是10,但我确实将优先级从1000改为750。

然后我复制了我的第一个额外视图,并将所有这些视图约束到最近的按钮,就像我对第一个entra视图所做的那样,但我删除了它们的宽度约束(对所有额外的视图,但第一个视图)和约束通过插入:Equals Width来获得第一个额外的视图。

然后我得到了我的结果,我希望它足够清楚并再次感谢。

good constraints