我正在开发iOS 8自定义键盘,我面临以下问题:
每次用户触摸键盘(点按,滑动等)时,都会调用来自- (void) viewDidLayoutSubviews{}
子类的 UIInputViewController
方法。我想避免这种情况,当用户触摸键盘时无需调用它。
另外,我发现如果我评论以下几行,当用户与键盘交互时,viewDidLayoutSubviews
不再被调用:
NSLayoutConstraint *keyboardButtonLeftSideConstraint = [NSLayoutConstraint constraintWithItem:self.customKeyboardView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0];
NSLayoutConstraint *keyboardButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:self.customKeyboardView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];
[self.view addConstraints:@[keyboardButtonLeftSideConstraint, keyboardButtonBottomConstraint]];
但是我无法摆脱这些限制,因为我需要它们来改变键盘的高度。我怎么能解决这个问题?
答案 0 :(得分:0)
我强烈建议您不要在键盘扩展中使用viewDidLayoutSubviews(以及viewWillLayoutSubviews)。它们将由于帧更改,约束更改以及许多其他事件而被调用,这有时会导致意外问题。 viewDidAppear可以替代。
如果你真的必须覆盖viewDidLayoutSubviews,请尝试使用flags来防止它被错误地调用。
-(void)viewDidLayoutSubviews {
if (self.alreadyLoaded) {
return;
}
else {
//...
}
}