UIView定位相关问题(iOS)

时间:2013-03-08 13:56:08

标签: iphone ios xcode uiview uikit

我有很多问题:

  1. 如何定位UIView以使其位于我将其添加到视图的底部?
  2. 如何将一个子视图添加到视图中,使其位于超级视图的一角有一个小间隙(就像我想要一个'x'十字标记来关闭一些东西)
  3. 他们是一个实用工具类,可以轻松实现UIView定位(和旋转)吗?
  4. 任何参考资料,开源教程等都会受到欢迎!

6 个答案:

答案 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中实现这一点。

本教程解释了两者: http://msmvps.com/blogs/kevinmcneish/archive/2012/12/10/tutorial-ios-6-auto-layout-versus-springs-and-struts.aspx

或者您可以以编程方式设置自动调整大小。这里解释得很好: 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中设置约束,但如果您想使用较旧的操作系统,则需要手动定位它们。数学。