我主要在我的XIB中使用AutoLayout创建iOS 8自定义键盘扩展。布局的最后一步是以编程方式添加键盘键。要做到这一点,我需要有效宽度来正确空格键。
我读过的大多数StackOverflow帖子和参考文献都说要在viewDidLayoutSubviews
中执行编程布局。大多数帖子都说self.view / self.inputView在viewDidLoad
中的大小不合适,因此viewDidLayoutSubviews
是正确的位置。
但是,self.inputView.bounds
和self.view.bounds
(和.frame
)在某些情况下会在viewDidLayoutSubviews
中给出0宽度。
奇怪,这似乎只发生在自动缩放/自动缩放iPhone 6应用程序的iPhone应用程序中。 Zynga的“与朋友一起说话”和我的旧版Facebook似乎就是其中之一。
任何人都可以帮忙吗?为什么inputView
的边界/帧在viewDidLayoutSubviews
被调用的时间内是0x0?还有其他更好的方法,我应该以编程方式添加组件吗?
答案 0 :(得分:0)
我不建议使用viewDidLayoutSubviews
进行键盘扩展。在viewDidLoad
中,它的大小不会有效,但不需要有效的大小来执行此操作。因为只要你获得设备型号就知道键盘的大小(方向是另一回事)。
至于你的问题,有时会多次调用viewDidLayoutSubviews
和viewWillLayoutSubviews
。创建视图时也可以frame.bounds.width == 0
。这就是我不建议使用它们的原因。我认为原因是iOS 8的键盘扩展部分仍然存在问题且不稳定。
如果您确实需要使用viewDidLayoutSubviews
,请防止错误地调用它:
- (void) viewDidLayoutSubviews {
if (self.view.frame.size.width == 0 || self.view.frame.size.height == 0)
return;
// Do something
}