Autolayout:原点和大小应根据宽度和高度因素改变

Autolayout: origin and size should change according to width and height factor

这是我需要的场景。

我在 IB 上放了一个 UIButton(大小 iPhone4 英寸),它在 IB 上的初始帧是 x:100,y:100,w:100,h:100.我希望原点和高度应根据设备尺寸而变化。例如 iPhone6 的宽度和高度是 375X667,因此宽度因子 (375/320=1.1718) 和高度因子 (667/568=1.1742 )。在这个场景中,我想改变我的按钮原点 X 和宽度乘以 宽度因子 (1.1718) 和原点 Y 和高度乘以 高度因子 (1.1782)。在这种情况下,我的按钮应该显示在 x:100X1.1718, y:100X1.1742, w:100X1.1718, h:100X1.1742 .

iPhone6+ 需要同样的东西。

我可以通过设置此自动调整大小掩码轻松实现此目的。我怎样才能通过使用自动布局来实现同样的目标?我应该遵循什么步骤,我应该应用什么约束?

My previous question on this

我附上了一些我需要使用 Autolayout 的屏幕截图(通过上图中显示的自动调整大小蒙版实现)。

我的尝试:-

Step1:- 在 IB 上取一个大小为 100X100 的按钮。设置它的 X=100 和 y=100。 第 2 步:- 应用此约束。

使用约束的乘数。因此,设置一个约束,使按钮的宽度等于顶视图的宽度,乘数为 100:320(您可以使用这种比率形式来表示乘数)。将约束的常量设置为 0。对按钮的高度与顶视图的高度成比例(比率 100:568)执行相同的操作。对于按钮的位置,将按钮的前导宽度限制为 100:320 的比例,将按钮的顶部与顶部视图的高度的比例限制为 100:568.

如果您想完全在故事板(或 XIB)中执行此操作,则需要使用间隔视图。

首先,在根视图的左上角放置一个间隔视图。将其顶部和左侧边缘限制为与父视图的距离为零。将其宽度限制为 100:320 到其父视图宽度(并确保约束的第一项是间隔)。将其高度限制为 100:568 到其父视图高度。这些宽度和高度约束将控制按钮的位置。

现在将按钮的上边缘约束到垫片的下边缘,并将按钮的左边缘约束到垫片的右边缘。在按钮和超级视图之间创建比例宽度和高度约束。

将间隔视图设置为隐藏。隐藏视图不可见且不接收触摸,但仍参与布局。

…如果你想在代码中做到这一点,只需使用自动调整掩码并将 translatesAutoresizingMaskIntoConstraints 设置为 YES

对于高度和宽度,在 Interface Builder 中创建一个 "aspect ratio" 约束 link 将按钮连接到超级视图。纵横比没有属性;它将使用创建它时的值来设置乘数(如果 iPhone <= 5 宽度并且 linking superview 到按钮宽度,它将是 320:100)。为宽高比添加第二个约束 link 将按钮高度调整为超级视图高度(如果您不想使用 iPhone 5 拉伸高度,您可以 link 按钮宽高比对自己。)。

对于来源,我认为没有办法 link 视图的来源和视图的大小。要根据屏幕大小将原点设置为任意高度或宽度,您需要创建一个间隔视图。不优雅,但有必要。添加视图并将其设置为隐藏(并在左侧的对象轮廓中将其命名,在 IB 中使用自动布局时,您可能希望对所有内容进行处理以使约束可读,但绝对在这里,以便您可以轻松再次找到它) .将创建约束设置为零 link 将其设置为按钮和顶部布局指南,将 superview.leading 和按钮前导设置为零。

要调整间距,您可以为父视图宽度和父视图高度创建宽高比约束,或者将其设置为等于按钮的宽度和高度。

作为你的问题,你可以为你的 UIButton 设置这个约束。


您不需要更改您为 UIButton 设置的高度和宽度的约束。


1.) 你需要设置水平space为Button.LeadingSuperview.Trailing .

设置constant=0Priority=1000Multiplier=100:320作为我已经在下图中设置了。


2.) 你需要设置水平space为Button.TopSuperview.Bottom .

设置constant=0Priority=1000Multiplier=100:568作为我已经在下图中设置了。


结果


希望这能解决您的问题。

试试这个解决方案

  1. 设置views top alignment to superviews centerY并设置乘数 84:240
  2. 将视图左对齐到父视图中心 X 并设置 乘数 100:160
  3. 使用乘数设置比例宽度 100:320 和比例高度 100:568

希望这能解决您的问题