我想将子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)
谢谢!
答案 0 :(得分:4)
更新旧响应,仅提及调整大小的掩码
在iOS 6中,添加了自动布局,尽管在故事板/ xib中使用XCode有点难看。 Autolayout太大了,无法解释,但其实质是,它是层次结构中视图之间的一组规则。因此,您可以将视图的x位置粘贴到父视图的右边框。请参阅Auto Layout Programming Guide
查看尺寸检查器中的选项:
这相当于做
myView.autoresizingMask = UIViewAutoresizingMaskFlexibleTopMargin |
UIViewAutoresizingMaskFlexibleLeftMargin |
UIViewAutoresizingMaskFlexibleWidth |
UIViewAutoresizingMaskFlexibleHeight;
请注意,通过代码执行此操作与通过IB执行此操作之间存在差异。边框的IB自动调整设置用作支柱,选择正确的设置,例如,意味着“我的右边框现在卡在超视图的右边框”。
另一方面,代码则相反,您需要指定哪些边框不是strut-ed,aka。他们很灵活。高度和宽度正常工作。
如果一切都失败了,不要开始在整个地方进行手动定位,我一直在那个位置,它只会导致无法使用的意大利面条代码,其中三种或更多方法正在弄乱相同的视图属性。
相反,您希望在UIView -layoutSubviews
上进行所有自定义定位。触发setNeedsLayout
时,根据需要调用此方法,例如,当视图更改宽度时,子视图将获取布局子视图事件。还可以更轻松地实现旋转界面,因为此方法会调用新的宽度,以确定动画的外观。
请记住,布局子视图在执行自动布局/自动调整大小蒙版后仍然有效。