在没有IB的情况下旋转uiview

时间:2010-09-03 04:25:24

标签: iphone uiview uiinterfaceorientation

在我的应用中,我的所有控件都是在代码中创建的。我没有使用IB进行控制。现在我想将视图旋转到横向模式。我知道我必须为此目的使用shouldAutorotate方法。

但由于我没有使用过IB,如何在横向模式下调整控件的大小?如何仅使用代码正确定位它们?

2 个答案:

答案 0 :(得分:1)

在大多数情况下,您可以通过将autoresizingMask属性设置为以下组合来获取视图以适当调整自身大小:

  • UIViewAutoresizingFlexibleLeftMargin
  • UIViewAutoresizingFlexibleRightMargin
  • UIViewAutoresizingFlexibleTopMargin
  • UIViewAutoresizingFlexibleBottomMargin
  • UIViewAutoresizingFlexibleWidth
  • UIViewAutoresizingFlexibleHeight

例如,假设您希望视图的宽度在将其旋转为横向时增加,您希望它相对于屏幕的顶部,左侧和右侧保持相同的边距,并且您希望其高度为保持不变。这意味着在上述六个属性中,只有宽度和底部边距应该是灵活的。其他四个属性是固定的。所以你会这样做:

yourView.autoresizingMask = UIViewAutoResizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

在极少数情况下,如果无法使用autoresizingMask属性使视图正常运行,则可以将它们包装在自定义视图中并覆盖该视图的layoutSubviews方法。当视图的帧因自动旋转而发生变化时,会调用此方法,因此您可以检查[[UIApplication sharedApplication] statusBarOrientation]并手动更新子视图的帧。

答案 1 :(得分:0)

您可以使用与原始方向相同的方式正确放置代码,例如设置框架。

至于代码中的位置,请查看UIViewController的各种方向更改方法,这些方法将在设备方向更改时调用。例如,您可以在willAnimateRotationToInterfaceOrientation:duration:内的视图中移动/调整控件的大小。