垂直居中视图,自动调整和iPhone 5 4“屏幕

时间:2013-03-08 01:27:43

标签: ios uikit xib iphone-5 autoresizingmask

我在-viewDidLoad中添加了一些自定义按钮添加到视图中。我希望它们在视图中垂直居中,如下所示:

self.customButton.center = CGPointMake(98.f, self.view.center.y);

然而,即使在3.5英寸设备上,视图高度也是504.0,我希望它在416(480 - 20(状态栏高度) - 44(导航栏高度))。

xib中的视图使用“Retina 4 Fullscreen”,但将其设置为自由形式无济于事。我当然不希望两个xib只是为了解释高度差异。

我知道我可以使用UIScreen,但我希望视图能够知道高度差。

编辑:奇怪的是,在-viewWillAppear中,视图高度已正确设置为416.0。为什么在[super viewDidLoad]超出我之后不会处理此问题。

人们如何处理这个问题? Autolayout可能会处理这个,但我需要一个兼容iOS5的方法。可以以某种方式自动化处理“居中”吗?

2 个答案:

答案 0 :(得分:8)

您在iOS5中没有Autolayout,但您仍然拥有自动调整遮罩。如果您在IB中垂直居中视图,请转到检查器并取消选择自动布局蒙版中的垂直支柱和弹簧,视图将在4“和3.5”屏幕上垂直居中。

或者您可以在viewDidLoad方法的代码中执行此操作。只需像现在一样将视图居中,然后像这样设置autoresizingMask:

 self.customButton.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | \
                                       UIViewAutoresizingFlexibleTopMargin);

答案 1 :(得分:1)

  

编辑:奇怪的是,在-viewWillAppear中,视图高度正确设置为416.0。为什么在[super viewDidLoad]超出我之后不会处理此问题。

因为调整视图大小不是加载视图的一部分!在-viewDidLoad中调用-view的方法可能看起来有点像这样:

-(UIView*)view
{
  if (!_view)
  {
    [self loadView];
    [self viewDidLoad];
  }
  return _view;
}

-(void)loadView
{
  // Some code to load the view from a nib/storyboard...
}

视图将通过yourViewController.view.frame = ...之类的调用进行调整大小,但这只能在加载视图之后发生(因此在调用-viewDidLoad之后)。

设置一些自动调整遮罩。这就是他们的目的。