代码之家  ›  专栏  ›  技术社区  ›  drvdijk bobDevil

在哪里确定UIView大小

  •  28
  • drvdijk bobDevil  · 技术社区  · 17 年前

    UIViewController 初始化该视图时,知道其UIView实例的大小吗?

    initWithFrame:(CGRect)frame UIViewController's UIViewController 关于子类划分和视图大小的状态:

    为视图创建视图时 层次结构,您应该始终设置 当视图控制器显示在

    UIViewController 实例应该设置这些属性。到目前为止,一切顺利 UIViewController 到目前为止,还不必知道它的视野有多大。

    UIViewController 如果请求了,并且视图属性为nil,则调用视图控制器的loadView方法。现在有一个问题,因为 UIView

    您可以使用零rect初始化视图( CGRectZero ):

    - (void)loadView {
        self.view = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
    }
    

    让调用者按如下方式设置视图框架:

    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);
    

    这将从视图控制器(viewController.view)请求视图,从而使用loadView方法加载其视图。此loadView方法使用 CGRectZero 。然后调用者设置其帧(view.frame=…)

    UI视图 UIViewController

    CGRectZero UIViewController 一个新的带有CGRect的初始化器方法(并因此赋予它一个框架属性)?或者我错过了什么,还有其他可能性吗?

    3 回复  |  直到 11 年前
        1
  •  8
  •   Nikolai Ruhe    17 年前

    必须 使用指定的初始化器。只需按如下方式使用init [[UIView alloc] init]

    setFrame: 这是不寻常的。布局通常在 layoutSubviews

        2
  •  0
  •   Ben G    16 年前

    我目前正试图在从UIViewController创建一个子类以创建一个通用组件后完成同样的事情,并注意到一些非常奇怪的事情:

    因此,我创建了视图层次结构,使用默认帧大小合成屏幕(因为在调用loadView时,我可能不知道应该显示什么帧)。

    但是,在什么情况下,我才能正确设置帧大小呢?Aka:我的视图控制器什么时候知道它的视图实际大小?

    我是否必须在ViewController子类中创建一个“setFrame”,创建ViewController的对象应该调用它?这看起来很奇怪。

    注意:您不应该使用视图控制器来管理只填充其窗口一部分的视图,即只填充应用程序内容矩形定义的区域的一部分。如果你想让一个界面由几个较小的视图组成,请将它们全部嵌入到一个根视图中,并使用视图控制器管理该视图。

    因此,UIViewController主视图似乎总是全屏显示。期间。

    不过,这确实给我带来了一个问题,因为我正在尝试创建一个自定义的UITabBarViewController(以便能够在tabbar中显示自定义图像,而不是蓝色渐变):我的tabBarViewController应该只在窗口的一部分中显示子视图控制器。..

        3
  •  0
  •   Community Mohan Dere    9 年前

    [[UIView alloc] initWithFrame:] 在loadView中。

    如果这是你想要的,那么你可能会发现我的答案在这里很有帮助: Determine the correct size in loadView

    推荐文章