我有一个UIButton,我以编程方式实现,因为只有在我旋转设备时才需要它。
当我旋转时按钮需要消失,当我去风景时出现。
只要我停留在同一个ViewController中,我就没有问题。无论如何我都可以旋转设备,按钮出现并按预期消失。 该应用程序是一个基于TabController的应用程序,当我转到另一个选项卡时,会发生相同的行为。
这就是问题
当我返回原始视图时,按钮出现,但之后永远不会消失。这几乎就像没有调用removeFromSuperView
,但即使它被调用,按钮也不会被删除。
为什么会这样?
-(void)autoRotationDetection
{
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
}
- (void) orientationChanged:(NSNotification *)note
{
UIDevice * device = note.object;
switch(device.orientation)
{
case UIDeviceOrientationPortrait:
/* start special animation */
[_menuButton removeFromSuperview];
break;
case UIDeviceOrientationPortraitUpsideDown:
/* start special animation */
break;
default:
break;
};
}
然后我打电话给
-(void)viewWillAppear:(BOOL)animated
{
[self autoRotationDetection];
}
抱歉应该补充一下。
答案 0 :(得分:0)
当我忘记调用[super viewWillAppear]时,我已经看到了这种行为(在转到另一个标签并再次返回后表现不同)。尝试添加它,看看它是否修复了它。
编辑后:
我认为更简单的方法是在viewWillLayoutSubviews中查看视图的边界,每次旋转时调用该视图(有时也会调用,但是对于像这样的简单事情,那应该是'无所谓)。在这个例子中,我隐藏或显示而不是删除,但这个概念应该适用于两者。
-(void)viewWillLayoutSubviews {
BOOL portrait = self.view.bounds.size.height > self.view.bounds.size.width;
if (portrait) {
self.button.hidden = YES;
}else{
self.button.hidden = NO;
}
}
您可以通过跟踪上次调用此方法时肖像的值来提高效率,并且只有在肖像更改后才更改按钮的状态。