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

时间:2011-08-30 18:18:18

标签: ios position subview relative

我想将子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)

谢谢!

1 个答案:

答案 0 :(得分:4)

更新旧响应,仅提及调整大小的掩码

Autolayout(iOS 6)

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

自动调整掩码(iOS 2)

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

Autoresizing and positioning inside a view

这相当于做

myView.autoresizingMask = UIViewAutoresizingMaskFlexibleTopMargin | 
    UIViewAutoresizingMaskFlexibleLeftMargin | 
    UIViewAutoresizingMaskFlexibleWidth | 
    UIViewAutoresizingMaskFlexibleHeight;

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

另一方面,代码则相反,您需要指定哪些边框不是strut-ed,aka。他们很灵活。高度和宽度正常工作。

布局子视图(iOS 2,但iOS5 +的陷阱)

如果一切都失败了,不要开始在整个地方进行手动定位,我一直在那个位置,它只会导致无法使用的意大利面条代码,其中三种或更多方法正在弄乱相同的视图属性。

相反,您希望在UIView -layoutSubviews上进行所有自定义定位。触发setNeedsLayout时,根据需要调用此方法,例如,当视图更改宽度时,子视图将获取布局子视图事件。还可以更轻松地实现旋转界面,因为此方法会调用新的宽度,以确定动画的外观。

请记住,布局子视图在执行自动布局/自动调整大小蒙版后仍然有效。