0

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

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

但是,视图高度504.0甚至在 3.5 英寸设备上,我希望它是416(480 - 20(状态栏高度) - 44(导航栏高度))。

xib 中的视图使用“Retina 4 Fullscreen”,但将其设置为自由格式并没有帮助。我当然不希望两个 xib 只是为了解释高度差异。

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

编辑:奇怪的是,在-viewWillAppear视图高度正确设置为416.0。为什么之后不处理这件事[super viewDidLoad]超出了我的范围。

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

4

2 回答 2

8

你在 iOS5 中没有 Autolayout,但你仍然有 autoresizing mask。如果您在 IB 中垂直居中视图,请转到检查器并取消选择自动布局遮罩中的垂直支柱和弹簧,该视图将在 4" 和 3.5" 屏幕上保持垂直居中。

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

 self.customButton.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | \
                                       UIViewAutoresizingFlexibleTopMargin);
于 2013-03-08T03:49:05.290 回答
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调用 after )。

设置一些自动调整大小的蒙版。这就是他们的目的。

于 2013-03-08T04:20:24.333 回答