【问题标题】:What exactly is done to a UIView on interface rotation?界面旋转的 UIView 到底做了什么?
【发布时间】:2012-09-25 06:11:43
【问题描述】:

有人能解释一下 iOS 在界面旋转方面做了什么吗?我的一个视图在旋转 iPhone 后消失了。似乎视图设置了一个新的框架、边界或其他什么,不知道。无论如何,一旦布局问题永远消失了,界面旋转后。所以必须在界面旋转时为视图设置一些东西。

我正在从 NIB 文件加载视图并使用导航控制器显示它:

BirthdayReminderWidgetConfigViewController *vc = [self.storyboard
    instantiateViewControllerWithIdentifier:@"BirthdayConfigController"];
self.navigationController pushViewController:vc animated:true];

也许我必须做一些设置才能在不旋转界面的情况下正确显示视图。

我遇到了从 nib 文件加载的视图的布局问题,如下所示:

该项目包含一个 MainStoryboard。在其中,我从 nib 文件加载视图。

NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil];
self.configViewController = [xib objectAtIndex:0];

故事板有一个导航控制器,加载的视图如下所示:

    if (currentWidgetConfigViewController != nil)
    {
      [self.navigationController pushViewController:currentWidgetConfigViewController animated:true];
    }

所以在我看来没有错吗? (第一个问题) 但是现在问题来了。

我的设计是这样的:

iOS 的作用如下

控件排列得不好。

除此之外,我还使用新视图上的按钮打开了一个带有该代码的 PeoplePicker:

[self presentViewController:self.picker animated:YES completion:nil];

使用[self.picker dismissViewControllerAnimated:true completion:nil]; 关闭人员选择器后,我得到了以下结果:

那么这里出了什么问题?

【问题讨论】:

  • 每次视图自行旋转时,您都必须更改视图框架。由于横向视图的高度小于纵向模式,因此,如果您的任何视图横向低于 320 或纵向超过 320 ,它一定是隐藏的。希望对你来说足够清楚。

标签: iphone objective-c ios uiview uinavigationcontroller


【解决方案1】:

在您的视图中覆盖 -setFrame:-setBounds: 以查看会发生什么:

- (void) setFrame: (CGRect) newFrame
{
    NSLog(@"New frame: %@", NSStringFromCGRect(newFrame));
    [super setFrame:newFrame];
}

另外,transform 通常会在轮换期间发生变化。 Orientation Zoo 可能会有所帮助,它是一个示例 Xcode 项目,展示了在各种轮换用例中发生的情况。不过好久没碰了,不知道还能不能用。

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2016-10-26
    • 2017-04-20
    • 2012-05-19
    • 2019-09-05
    • 2012-10-06
    相关资源
    最近更新 更多