Iphone 为什么self.bounds.size.height在此代码中不考虑UINavigationView导航条?

Iphone 为什么self.bounds.size.height在此代码中不考虑UINavigationView导航条?,iphone,ios,uiview,uinavigationcontroller,bounds,Iphone,Ios,Uiview,Uinavigationcontroller,Bounds,我有一个配置UITableView,可以通过UINavigationController方法启动颜色选择器: [self.navigationController pushViewController:colorPickerViewController animated:YES]; [colorPickerViewController release]; 这意味着颜色选择器在顶部有一个导航栏(和后退按钮) ColorPickerViewControl及其视图ColorPickerView的结构

我有一个配置UITableView,可以通过UINavigationController方法启动颜色选择器:

[self.navigationController pushViewController:colorPickerViewController animated:YES];
[colorPickerViewController release];
这意味着颜色选择器在顶部有一个导航栏(和后退按钮)

ColorPickerViewControl及其视图ColorPickerView的结构如下所示:

- ColourPickerViewController - in it's XIB file at the top level view it has:
  - ColorPickerView : UIView (i.e. custom UI view) - in it's methods it has:
    - (id)initWithCoder:(NSCoder*)coder  {
       if ((self = [super initWithCoder:coder])) {
         CGFloat currVertBounds = self.bounds.size.height;
这里的问题是currVertBounds的值即将达到480,因此它没有考虑导航栏

问题:如何获得ColorPickerView实例的真实显示高度?


这是否与试图在自定义UIView中计算布局有关,并且在该阶段,自定义视图可能没有在总体controll/navigationController中呈现

是的,这是正确的,因为UINavigationController的实例是在您的(delegate.h)中声明的&导航栏被添加到窗口中而不是在您的self.view中

当您检查当前视图的边界时,它肯定会返回320*480。
它不应该在视图中包含导航栏的高度,因为它不在该视图中。它在窗口上。

根据定义,在Interface Builder中创建iPhone视图时,其高度为480像素,因此初始化视图时您会看到这一点。视图正确初始化并添加到视图堆栈后,将调整其大小以匹配实际可用空间

你只是在它调整之前询问它的高度视图。
尝试在
viewDidLoad
中读取高度,那么它应该是正确的。

您读取
边界的时间太早了。在
[super initWithCoder::
期间,
UIKit
中发生的任何布局/子视图魔术都不会发生。您应该阅读
bounds
并将您的视图布局为:

  • viewdiload
    /
    视图中将出现
    ,并为所有手动创建的UI元素设置自动调整大小参数,以便它们可以根据不同的界面方向移动。在这些函数中,我不会依赖于
    bounds
    是否完全正确,但我会说它至少是正确的高宽比。不过,它可能是在错误的方向
  • 如果要手动定位元素,请在视图中显示。当您点击
    viewdide时,所有的大小调整都已经发生了,唯一需要担心的是将来的旋转,您应该在
    WillAnimateRotationInterfaceOrientation:duration:
    中调整视图
  • 关于国家的文件:

    调用此方法时,interfaceOrientation属性已设置为新方向。因此,您可以在此方法中执行视图所需的任何其他布局

    iOS 5.0文档添加了以下条款:

    …设置为新方向,视图的边界已更改。因此


    我认为以前的iOS版本仍然如此。

    您想更改导航栏或nt的高度。