模拟器中的 UIView 边界/绘图不正确
Posted
技术标签:
【中文标题】模拟器中的 UIView 边界/绘图不正确【英文标题】:Incorrect UIView bounds/drawing in the Simulator 【发布时间】:2012-12-05 13:18:52 【问题描述】:我创建了一个单视图测试应用,并在主情节提要的UIViewController
中添加了UIButton
和UIView
。我已经调整了按钮和视图的大小以具有相同的大小。
在我的 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 边界/绘图不正确的主要内容,如果未能解决你的问题,请参考以下文章