【问题标题】:Root view controller margins being set to odd values根视图控制器边距设置为奇数值
【发布时间】:2016-12-09 19:41:30
【问题描述】:

出于某种原因,我的UIWindowrootViewController 的左右边距设置为16,上下边距设置为0。不幸的是,我正在使用手动初始化所​​有内容的遗留(阅读:非故事板)应用程序。这会影响很多层的视图控制器,它们坚持底部边距为 0。

我在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions有这个代码

代码

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = [[UIViewController alloc] init];
[self.window makeKeyAndVisible];

UIEdgeInsets insets = self.window.layoutMargins;
NSLog(@"Left %f, Right %f, Bottom %f, Top %f", insets.left, insets.right, insets.bottom, insets.top);
insets = self.window.rootViewController.view.layoutMargins;
NSLog(@"Left %f, Right %f, Bottom %f, Top %f", insets.left, insets.right, insets.bottom, insets.top);

产生以下输出

2016-08-03 18:10:24.280 app[426:182429] Left 8.000000, Right 8.000000, Bottom 8.000000, Top 8.000000
2016-08-03 18:10:24.280 app[426:182429] Left 16.000000, Right 16.000000, Bottom 0.000000, Top 0.000000

编辑

我终于发现这是预期的行为。但是,当我推送一个新的 UIViewController 时,我很惊讶没有添加底部边距。这是预期的行为吗?我不应该期望在 iOS 中有底边距吗?

【问题讨论】:

    标签: ios uiviewcontroller autolayout uiwindow rootview


    【解决方案1】:

    您所描述的边距只不过是“指南”。 它们不会影响视图的布局,除非您将它们用作布局约束的一部分。如果您决定使用框架/边界,它们根本不会影响布局。

    【讨论】:

    • 我依靠 layoutMargins 来布置我的视图,我发现按钮被放置在视图的底部,但却是从外部设置的,这很奇怪。我认为这是意料之中的,但是如果您使用情节提要与使用 XIB 进行构建,它将提供使用底部和顶部布局指南,它们也是嵌入的。似乎正在发生一些遗留问题。
    • 确保您清楚地了解使用 AutoLayout 与使用 Frames/Bounds 之间的区别。您对保证金准则的期望因系统而异。
    • 我只使用过自动布局,我很惊讶如果我在 iOS 中创建一个单页应用程序并将唯一的子视图锁定到顶部、底部和侧边距,它不会触摸边缘,但确实触摸屏幕的顶部和底部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多