我在-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的方法。可以以某种方式自动化处理“居中”吗?
答案 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
之后)。
设置一些自动调整遮罩。这就是他们的目的。