【问题标题】:UIView loaded from xib as subview : How to set the frame/size properly?从 xib 作为子视图加载的 UIView:如何正确设置框架/大小?
【发布时间】:2011-06-13 03:11:57
【问题描述】:

我的 iphone 应用程序有一个小问题(我对 iphone 编程还是很陌生,即使我之前已经完成了 Objective-c)。

我的主窗口中有一个名为 centerView 的 UIView。 我创建了一个与 xib 文件链接的 UIViewController 的单例子类(我们称之为FooViewController)。我的目标是将关联视图加载为子视图(使用 centerView 的整个框架的 centerView)。

问题:FooViewController 控制的视图不使用其父视图的框架。

我已尝试添加:

  • self.view.frame = self.view.superview.frame 在 FooViewController 的 initWithNib... 方法的“自定义初始化”部分中

  • [[[FooViewController sharedController] view] setFrame:centerView.frame]当我将视图添加到centerview时([centerView addSubView:[[FooViewController sharedController] view]])(我在这条线之前和之后都试过了)

但我无法获得良好的行为(即良好的尺寸)。有多个与此类问题相关的问题,但我无法在其中找到答案:

  • 你知道我该如何解决吗?
  • [可选] 与 xib 链接的 UIViewController 的实例化是如何工作的?必须有一个资源文件,其中显示了 xib 的名称?或者它是否会寻找与类同名的 xib?

提前感谢您的帮助。

【问题讨论】:

    标签: iphone objective-c uiview


    【解决方案1】:

    从 NIB 加载时,视图会在视图控制器的 loadView 方法中加载,而不是在初始化程序中。因为你不应该真正覆盖loadView,尤其是。如果您从 NIB 加载它,您应该尝试在视图控制器的 viewDidLoad 方法中执行 #1 (self.view.frame = self.view.superview.frame)。当然,您应该确保在执行此语句时将视图添加到超级视图中。您还需要确保此时已经正确设置了 superview 的框架。

    另一个可以尝试的地方是viewWillAppear: 方法。到那时,您的视图的超级视图很可能已经正确设置。

    【讨论】:

    • 非常感谢您的回答。我试图将有关框架设置的代码放在 viewWillAppear 中,但它似乎确实可以做任何事情。实际上问题来自另一部分:即使在 viewWillAppear 中 superview 也为空(但 self.view.superview.frame 不会创建任何段错误......)。我会调查这一点。
    • 在obj-c中,如果receiver为nil,它将接受任何方法,并返回nil(我认为)。这就是为什么即使 self.view.superview 为 nil 也不会出现段错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2013-08-09
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多