模拟器中的 UIView 边界/绘图不正确

Posted

技术标签:

【中文标题】模拟器中的 UIView 边界/绘图不正确【英文标题】:Incorrect UIView bounds/drawing in the Simulator 【发布时间】:2012-12-05 13:18:52 【问题描述】:

我创建了一个单视图测试应用,并在主情节提要的UIViewController 中添加了UIButtonUIView。我已经调整了按钮和视图的大小以具有相同的大小。

在我的 VC 的 -viewDidAppear:animated 方法中,我转储了按钮和视图的框架和边界:

- (void)viewDidAppear:(BOOL)animated

    NSLog(@"button bounds: %@", NSStringFromCGRect(self.theButton.bounds));
    NSLog(@"button frame:  %@", NSStringFromCGRect(self.theButton.frame));

    NSLog(@"view bounds:   %@", NSStringFromCGRect(self.theView.bounds));
    NSLog(@"view frame:    %@", NSStringFromCGRect(self.theView.frame));

这是在模拟器中运行时的输出:

button bounds: 0, 0,     100, 100
button frame:  110, 72,  100, 100
view bounds:   0, 0,     100, 12
view frame:    110, 179, 100, 12

在设备上运行时:

button bounds: 0, 0,     100, 100
button frame:  110, 72,  100, 100
view bounds:   0, 0,     100, 100
view frame:    110, 179, 100, 100

我不明白为什么在模拟器中运行时视图报告高度为 12。视图在模拟器中绘制不正确,但在设备上运行时按预期绘制。请注意,UIViewController 最上面的 UIVIew 未选中“Autoresize Subviews”(尽管这两种方式都没有区别)。

(Xcode 4.5.2.ios 6.0)

谢谢, 计算机科学

【问题讨论】:

从视图底部延伸出来的那条线,也许是让它自动调整视图大小? jjv360:那一行只是 IB 的自动居中指南。它可以帮助您在其父视图中居中视图)。它与绘画无关。 :) 向视图添加内容并查看它是否自动调整大小。 Captain.MM - 我不知道为什么这会导致 same 应用程序在设备和模拟器上的行为不同,但我在小 UIView 中添加了一个 UILabel 和没有区别(正如预期的那样)。 您正在使用相当新的约束。可能存在错误并非不可能。尝试删除它们。 【参考方案1】:

单击显示布局中的“应用 Retina 4 Form Factor”按钮。您为 Retina 4 设置了此设置,因此在模拟器中运行时屏幕大小调整为 3.5。您可以通过运行 iPhone5 模拟器(Retina 4 英寸)来验证这一点。将外形尺寸切换为 3.5 英寸后,您会注意到高度变为 12。

【讨论】:

感谢 MarkM。那确实是我的问题。我想知道那时我应该如何在 IB 工作。例如,假设无论设备/模拟器大小如何,我都希望视图为 100、100?为什么按钮没有像视图那样调整大小? (再次,提前感谢) 我倾向于始终使用 3.5" 外形尺寸,然后来回切换以检查兼容性。这减轻了每次检查布局时都必须启动模拟器的情况。AutoLayout 为此添加了另一层,但概念是一样的。坚持使用 3.5" 布局,除非您不打算支持任何 3.5" 设备。Ray 在他的网站上有一篇非常好的文章。老实说,我仍然不喜欢使用 AutoLayout 功能。 raywenderlich.com/20897/beginning-auto-layout-part-2-of-2 再次感谢您,Mark - 我现在理解了这个问题,并将继续使用您的建议。我还将查看 Ray 的教程(我喜欢那个网站)。请支持我的问题,除非你认为我是个白痴。 ;-) 即使我认为你是个白痴,我也可以投票吗?!?!大声笑,完全在开玩笑......赞成。 ;-) 是的,多年来,Ray 一直是许多开发人员的良好开端。那里的许多作者都写了很棒的 tuts 并提供了出色的现实世界示例。

以上是关于模拟器中的 UIView 边界/绘图不正确的主要内容,如果未能解决你的问题,请参考以下文章

从 XIB 加载 UIView 大小不正确

TextViews 在 ScrollView 中的位置不正确

UIView 子类边界在控制台中不正确

尽管已正确初始化,XIB 视图仍不显示任何内容

更改方向时正确查看绘图,但在第一次显示时失败

如果我的 UIView 设置为不透明,为啥它仍然被模拟器着色为“混合”?