0

我有一堆问题:

  1. 如何定位 UIView 使其位于要添加到的视图的底部?
  2. 如何将子视图添加到视图中,使其位于超级视图的角落并留有小间隙(例如,如果我想要一个“x”十字符号来关闭某些东西)
  3. 它们是用于轻松 UIView 定位(和旋转)的实用程序类吗?

任何参考资料、开源教程等都将受到欢迎!

4

6 回答 6

1

(a) 如何定位 UIView 使其位于要添加到的视图的底部?

好的,假设您想定位button为视图底部的子视图form,您可以通过从按钮的高度中减去按钮的高度来计算origin.y子视图的buttonform

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;

或另一种使用方式CGRectGetMidX(在CGGeometry 实用方法中找到):

buttonFrame.origin.x = CGRectGetMidX(form.bounds) - buttonFrame.size.width/2;

当父视图的大小发生变化时,自动调整大小处理调整框架。但是您仍然必须先定位它。

于 2013-03-08T14:22:59.027 回答
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;
于 2013-03-08T14:33:41.313 回答
0

您可以使用 iOS 6 的新 Autolayout 功能或 Interface Builder 中的旧 Struts & Springs 来实现此目的。

本教程解释了这两个: 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

于 2013-03-08T13:58:47.690 回答
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);

如果你会做很多这样的事情,那么创建一个实用程序类或方法。

于 2013-03-08T14:16:42.003 回答
0

如果超级视图的大小发生变化,自动布局将帮助您定位视图并保持这些位置。如果超级视图不会改变,你真的不需要弄乱约束——你可以设置子视图的位置 appropra

如果您将视图添加viewB到视图viewA

a) 定位viewB,使其底部边缘对应于viewA

viewB.frame.origin.y = viewA.bounds.size.height - viewB.bounds.size.height;

b)你没有说哪个角落,但这只是做数学的问题。例如,viewA 的坐标系中的右上角viewA是 at {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 以编程方式访问自动布局系统的约束。有一种很好的视觉格式语言,因此对于您的问题 (a),您可以将约束设置为viewA

V:|-[viewB]-0-|

V表示您在垂直方向上工作,'表示父视图(即)|的边缘(顶部和底部,多亏了) ,意味着其父视图与底部之间的距离应为 0。VviewA0viewB

于 2013-03-08T14:22:26.277 回答
-1

您可以在 iOS6 中设置约束,但如果您想在较旧的操作系统上工作,您需要手动定位它们。数学。

于 2013-03-08T14:08:40.323 回答