如何在iOS中自动处理相对定位?

and*_*dkc 6 subview ios

我想将子UIView(sub_UIView)定位为父UIView(parent_UIView)的子视图.当parent_UIView调整大小/移动时,sub_UIView将保持parent_UIView的相对位置.例如,sub_UIView位于parent_UIView的右下角.当parent_UIView移动时,sub_UIView将自动停留在parent_UIView的右下角.

我设法通过在parent_UIView的帧移动时更新sub_UIView的框架来手动执行此操作,但是如何在iOS中自动执行此操作?这有什么属性吗?(类似于用于调整子视图大小的autoresizingmask)

谢谢!

Can*_*Can 4

更新了旧的回复,仅提到调整蒙版大小

自动布局(iOS 6)

在 iOS 6 中,添加了自动布局,尽管在 Storyboard/xib 中使用 XCode 有点难看。自动布局太大了,无法解释,但其本质是,它是层次结构中视图之间的一组规则。因此,您可以将视图的 x 位置粘贴到父视图的右边框。请参阅自动布局编程指南

自动调整蒙版大小 (iOS 2)

看一下尺寸检查器中的选项:

在视图内自动调整大小和定位

这相当于做

myView.autoresizingMask = UIViewAutoresizingMaskFlexibleTopMargin | 
    UIViewAutoresizingMaskFlexibleLeftMargin | 
    UIViewAutoresizingMaskFlexibleWidth | 
    UIViewAutoresizingMaskFlexibleHeight;
Run Code Online (Sandbox Code Playgroud)

请注意,通过代码执行此操作与通过 IB 执行此操作之间存在差异。边框的 IB 自动调整大小设置就像支柱一样工作,例如,选择正确的边框意味着“我的右边框现在粘在超级视图的右边框上”。

另一方面,代码执行相反的操作,您需要指定哪些边框不被支撑,又名。他们很灵活。高度和宽度正常工作。

布局子视图(iOS 2,但 iOS5+ 存在问题)

如果一切都失败了,不要开始到处手动定位,我一直处于这个位置,它只会导致不可维护的意大利面条代码,其中三个或更多方法会弄乱相同的视图属性。

相反,更喜欢在UIView -layoutSubviews. 当 a 被触发时,会根据需要调用此方法setNeedsLayout,例如,当视图的宽度发生变化时,子视图将获取布局子视图事件。还使得实现旋转界面变得更加容易,因为该方法被调用以获取新的宽度,以确定动画的外观。

请记住,布局子视图在执行自动布局/自动调整大小蒙版后才起作用。