- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
摘要:在初始化 View 时,UIViewController
应该如何知道其 UIView 实例的大小?
UIView 的专用初始化方法是 initWithFrame:(CGRect)frame
方法。这为新创建的 UIView 设置了框架。如果请求该 View Controller 的 View ,则可以从 UIViewController 的 loadView 方法调用此方法。 UIViewController
的文档说明了子类化和 View 大小:
When creating the views for your view hierarchy, you should always set the autoresizing properties of your views. When a view controller is displayed on screen, its root view is typically resized to fit the available space, which can vary depending on the window’s current orientation and the presence of other interface elements such as the status bar.
因此,UIViewController
实例应该设置这些属性。到目前为止一切顺利,UIViewController
到目前为止不必知道其 View 有多大或将有多大。
当请求 UIViewController
的 View 且 view 属性为 nil 时,将调用 View Controller 的 loadView 方法。现在有一个问题,因为 UIView
需要初始化,但 View Controller 仍然不知道 View 应该是什么大小。您应该初始化该 View 有多大?您在代码中的何处确定 View 大小?
您可以使用零矩形 (CGRectZero
) 初始化 View :
- (void)loadView {
self.view = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}
并让调用者像这样设置 View 框架:
UIViewController *viewController = [[MyUIViewController alloc] init];
// next two lines are normally combined, but for clarity they are not now
UIView *view = viewController.view;
view.frame = CGRectMake(0, 0, 200, 200);
这会从 View Controller (viewController.view) 请求 View ,从而使用 loadView 方法加载其 View 。此 loadView 方法使用 CGRectZero 初始化 View 。然后调用者设置其框架(view.frame = ...)
问题是 View 上的frame属性设置了两次,如果您的自定义UIView
在setFrame方法中执行一些高级布局(例如放置和调整 subview 的大小),可能会导致更多的双重工作)。您可以通过为 UIViewController
创建一个专用的初始化方法来防止这种情况,该方法已经向调用者询问了 CGRect,您将其存储在 ivar 中。调用 loadView 方法时,您可以使用此 ivar 创建 View 。
去这里的好方法是什么?设置 View 的框架两次(使用CGRectZero
初始化,然后设置),或者为UIViewController
提供一个带有CGRect的新初始化方法(从而为其提供一个框架属性) ?或者我错过了什么并且还有其他可能性吗?
最佳答案
您不必必须使用指定的初始值设定项。只需像 [[UIView alloc] init]
中那样使用 init 即可。必须从子类的初始化器中使用指定的初始化器。
另一方面,两次设置框架应该不会造成太大伤害。在 setFrame:
中执行大量任务是不寻常的。布局通常在 layoutSubviews
中完成,并且仅执行一次。
关于iphone - 在哪里确定 UIView 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1103089/
这个问题在这里已经有了答案: C sizeof a passed array [duplicate] (7 个回答) 8年前关闭。 在一个函数中,我声明了一个数组: int char_count_ar
简而言之,文件系统如何与 block 设备通信? 最佳答案 我对 block 大小不太了解。我认为 ext4(Linux)的文件系统的 block 大小是 4KB,考虑到现代处理器的页面大小(4KB)
我知道 tinyint(1) 和 tinyint(2) 具有相同的存储空间范围。 唯一的区别是显示宽度不同。这是否意味着 tinyint(1) 将存储所有类型的整数但只正确显示 0 到 9 的范围?而
今晚我已经研究了以下代码几个小时,但我只是摸不着头脑。 当使用函数从标准输入填充数组时,我不断收到“大小 8 的无效写入”和“大小 8 的无效读取”。 如有任何帮助,我们将不胜感激...我知道 Sta
我有一个 valgrind 错误,我不知道如何摆脱它们: ==5685== Invalid read of size 8 ==5685== at 0x4008A1: main (in /home
我对 Hadoop 的概念有点困惑。 Hadoop block 大小、拆分大小和 block 大小 之间有什么区别? 提前致谢。 最佳答案 block 大小和 block 大小相同。 拆分大小 可能与
我想不出一个好的标题,所以希望可以。 我正在做的是创建一个离线 HTML5 webapp。 “出于某些原因”我不希望将某些文件放在缓存 list 中,而是希望将内容放在 localStorage 中。
无法将 xamarin apk 大小减少到 80 MB 以下,已执行以下操作: 启用混淆器 配置:发布 平台:事件(任何 CPU)。 启用 Multi-Dex:true 启用开发人员检测(调试和分析)
我正在开发一个程序,需要将大量 csv 文件(数千个)加载到数组中。 csv 文件的尺寸为 45x100,我想创建一个尺寸为 nx45x100 的 3-d 数组。目前,我使用 pd.read_csv(
Hello World 示例的 React Native APK 大小约为 20M (in recent versions),因为支持不同的硬件架构(ARMv7、ARMv8、X86 等),而同一应用程
我有一个包含 n 个十进制元素的列表,其中每个元素都是两个字节长。 可以说: x = [9000 , 5000 , 2000 , 400] 这个想法是将每个元素拆分为 MSB 和 LSB 并将其存储在
如何设置 GtKTextView 的大小?我想我不能使用 gtk_widget_set_usize。 最佳答案 您不能直接控制小部件的大小,而是由其容器完成。您可以使用 gtk_widget_set_
这个问题在这里已经有了答案: c++ sizeof() of a class with functions (7 个答案) 关闭 5 年前。 结果是 12。 foobar 函数存储在内存中的什么位置
当我在 ffmpeg(或任何其他程序)中使用这样的命令时: ffmpeg -i input.mp4 image%d.jpg 所有图像的组合文件大小总是比视频本身大。我尝试减少每秒帧数、降低压缩设置、模
我是 clojurescript 的新手。 高级编译后出现“77 KB”的javascript文件是否正常? 我有一个 clojurescript 文件: 我正在使用 leinigen: lein c
我想要一个 QPixmap尺寸为 50 x 50。 我试过 : QPixmap watermark(QSize(50,50)); watermark.load(":/icoMenu/preparati
我正在尝试从一篇研究论文中重新创建一个 cnn,但我对深度学习还是个新手。 我得到了一个大小为 32x32x7 的 3d 补丁。我首先想执行一个大小为 3x3 的卷积,具有 32 个特征和步幅为 2。
我一直在尝试调整 View Controller 内的 View 大小,但到目前为止没有运气。基本上,我的 View 最底部有一个按钮,当方向从纵向更改为横向时,该按钮不再可见,因为它现在太靠下了。
如何使用此功能检查图像的尺寸?我只是想在上传之前检查一下... $("#LINK_UPLOAD_PHOTO").submit(function () { var form = $(this);
我用 C++ 完成了这个,因为你可以通过引用传递参数。我无法弄清楚如何在 JavaScript 中执行此操作。我的代码需要更改什么?我的输出是1 this.sizeOfBst = function()
我是一名优秀的程序员,十分优秀!