iOS 8自定义键盘:在某些情况下,view.DidLayoutSubviews中的self.inputView.bounds仍为{0,0},{0,0}

时间:2015-01-24 16:14:50

标签: ios objective-c iphone ios8 custom-keyboard

我主要在我的XIB中使用AutoLayout创建iOS 8自定义键盘扩展。布局的最后一步是以编程方式添加键盘键。要做到这一点,我需要有效宽度来正确空格键。

我读过的大多数StackOverflow帖子和参考文献都说要在viewDidLayoutSubviews中执行编程布局。大多数帖子都说self.view / self.inputView在viewDidLoad中的大小不合适,因此viewDidLayoutSubviews是正确的位置。

但是,self.inputView.boundsself.view.bounds(和.frame)在某些情况下会在viewDidLayoutSubviews中给出0宽度。

奇怪,这似乎只发生在自动缩放/自动缩放iPhone 6应用程序的iPhone应用程序中。 Zynga的“与朋友一起说话”和我的旧版Facebook似乎就是其中之一。

任何人都可以帮忙吗?为什么inputView的边界/帧在viewDidLayoutSubviews被调用的时间内是0x0?还有其他更好的方法,我应该以编程方式添加组件吗?

1 个答案:

答案 0 :(得分:0)

我不建议使用viewDidLayoutSubviews进行键盘扩展。在viewDidLoad中,它的大小不会有效,但不需要有效的大小来执行此操作。因为只要你获得设备型号就知道键盘的大小(方向是另一回事)。

至于你的问题,有时会多次调用viewDidLayoutSubviewsviewWillLayoutSubviews。创建视图时也可以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
}