我有很多问题:
任何参考资料,开源教程等都会受到欢迎!
答案 0 :(得分:1)
(a)如何定位UIView以使其位于我将其添加到视图的底部?
好的,假设您要将button
定位为视图底部form
的子视图,您可以通过减去按钮的高度来计算子视图origin.y
的{{1}}从button
form
您也可以更改原点水平位置。你想要它在CGRect buttonFrame = button.frame;
buttonFrame.origin.y = form.bounds.size.height - buttonFrame.size.height;
button.frame = buttonFrame;
[form addSubview:button];
的左下角吗?
form
或在buttonFrame.origin.x = 0;
的右边缘?
form
或buttonFrame.origin.x = form.bounds.size.width - buttonFrame.size.width;
的中间(水平)?
form
或使用buttonFrame.origin.x = (form.bounds.size.width - buttonFrame.size.width) / 2;
的其他方式(在CGGeometry utility methods中找到):
CGRectGetMidX
当父视图的大小更改时,自动调整句柄调整帧。但你仍然需要先定位它。
答案 1 :(得分:1)
int xOffset = 20;
int yOffset = 20;
CGRect BottomRight_NewFrame = CGRectMake((superview.frame.size.width - subview.frame.size.width-xOffset), (superview.frame.size.height - subview.frame.size.height-yOffset), subview.frame.size.width, subview.frame.size.height);
subview.frame = BottomFrame;
答案 2 :(得分:0)
您可以使用iOS 6的新Autolayout功能或旧的Struts& amp;在Interface Builder中实现这一点。
或者您可以以编程方式设置自动调整大小。这里解释得很好: UIView autoresizingMask - Interface Builder to Code - Programmatically create struts and springs - Swift or Objective-C
答案 3 :(得分:0)
设置框架很容易,例如(未经测试的代码)
subview.frame = CGRectMake((superview.frame.origin.x - subview.frame.origin.size.width/2)-20, (superview.view.frame.origin.y - subview.frame.origin.size.height/2)-20, subview.view.frame.size.width, subview.view.frame.size.height);
如果您要做很多这样的事情,那么创建一个实用程序类或方法。
答案 4 :(得分:0)
如果超视图的大小发生变化,Autolayout将帮助您定位视图并保持这些位置。如果superview不会改变,你实际上不需要搞乱约束 - 你可以设置子视图appropra的位置
如果您要添加观看viewB
以查看viewA
:
a)定位viewB
,使其下边缘对应viewA
的下边缘:
viewB.frame.origin.y = viewA.bounds.size.height - viewB.bounds.size.height;
b)你没有说出哪个角落,但这只是一个数学问题。例如,viewA
的右上角位于viewA坐标系中的{viewA.bounds.size.x, 0}
。如果您想将viewB
放在那里,请将其原点设置为:
{viewA.bounds.size.x-viewB.bounds.size.x, 0}
如果要添加边距,可以将其添加到计算中:
int margin = 10;
{viewA.bounds.size.x-viewB.bounds.size.x-margin, margin}
d)使用NSLayoutConstraint以编程方式访问自动布局系统的约束。有一个很好的visual format language,因此对于您的问题(a),您可以将viewA
的约束设置为:
V:|-[viewB]-0-|
V
表示您正在垂直方向工作,|
表示超级视图的边缘(顶部和底部,感谢V
)(即{ {1}}),而viewA
表示0
与其超级视图底部之间的距离应为0.
答案 5 :(得分:-1)
您可以在iOS6中设置约束,但如果您想使用较旧的操作系统,则需要手动定位它们。数学。