【问题标题】:What functions are called between subview's awakeFromNib and view's viewDidLoad?子视图的 awakeFromNib 和视图的 viewDidLoad 之间调用了哪些函数?
【发布时间】:2013-03-16 23:53:20
【问题描述】:

我在情节提要中有一个 UIView/UIViewController (UIViewController),其中包含一个具有关联 .xib 文件的自定义 UIView (CustomView)。我在加载UIViewController时遇到如下现象:

  • CustomViewawakeFromNib函数被调用
  • SOMETHING(?) 将我的子视图的框架设置为 0.0 的高度;堆栈跟踪显示[UIViewController autoresizedArchivedView](相关?)
  • UIViewControllerviewDidLoad函数被调用

知道awakeFromNibviewDidLoad 之间发生的这个“东西”是什么以及我可以如何控制它吗?

【问题讨论】:

  • 那个“东西”很可能是自动布局。尝试在-(void)viewDidLayoutSubviews 中调用自定义视图的awakeFromNib,看看它是否有效。
  • @Eugene:看看有没有用?从视图控制器的 viewDidLayoutSubviews 中调用自定义视图的 awakeFromNib 似乎不会将自定义视图设置回其原始高度(从情节提要中设置)。

标签: objective-c cocoa-touch viewdidload autoresize awakefromnib


【解决方案1】:

直到之后 viewDidLoad:

存档对象才设置几何属性
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        NSLog (@"%@ %@",
               NSStringFromSelector(_cmd),
               NSStringFromCGRect(self.testView.frame));

    }

    - (void) viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        NSLog (@"%@ %@",
               NSStringFromSelector(_cmd),
               NSStringFromCGRect(self.testView.frame));
    }


    - (void) viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        NSLog (@"%@ %@",
               NSStringFromSelector(_cmd),
               NSStringFromCGRect(self.testView.frame));
    }

日志:

    viewDidLoad {{0, 0}, {0, 0}}
    viewWillAppear: {{0, 0}, {0, 0}}
    viewDidAppear: {{80, 224}, {160, 274}}

【讨论】:

  • 我的日志文件显示:viewDidLoad {{0, 249}, {320, 0}}, viewWillAppear: {{0, 249}, {320, 0}}, viewDidAppear: {{0, 249}, {320, 0}}。子视图是带有关联 .xib 文件的自定义 UIView。
猜你喜欢
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多