我正在开发一个自定义键盘,我在Interface Builder中编辑了自己的视图。
视图在加载时以编程方式添加到键盘根视图。它包含堆栈视图,并填充整个视图,自动调整大小。
问题是键盘视图的大小不适合它打开的应用程序的视图。看起来它有一些固定的大小,因为当我水平旋转模拟器时,我可以看到更多的宽度,而不是垂直时。
如何将其大小设置为放置在其中的根视图的宽度?
以下是键盘在界面生成器和运行iPhone 5S的模拟器中的外观:
答案 0 :(得分:0)
首先,我们需要从布局更改中获取大小更改的挂钩,我们可以这样做:
override var bounds: CGRect {
didSet {
print("Bounds have changed: \(bounds)")
}
}
这应该在您的自定义键盘视图中使用。接下来,我们要更新自定义键盘布局。查看截图,它表明我们需要做的就是调整键的高度和宽度,稍后您可以根据大小类更改添加调整,从而更好地控制布局。您将需要使用@IBOutlets
保持对高度和宽度约束的引用,或者通过迭代子视图并手动查找和更改宽度和高度约束,两者都可能很乏味,但使用@IBOutlets
是更容易。
func updateKeys() {
DispatchQueue.main.async {
// Create array of width constraints
let widthConstraints: [NSLayoutConstraint] = widthArray()
widthConstraints.forEach { _ in /* change width constant for current layout */ }
// Create array of height constraints
let heightConstraints: [NSLayoutConstraint] = heightArray()
heightConstraints.forEach { _ in /* change height constant for current layout */ }
}
}
这只是一种做法,我发现在自动布局中总是有一种方法可以使用复杂的布局,但它应该显示一个可以使用的模式。
答案 1 :(得分:-2)
您是否尝试过实施这些通知?
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardFrameWillChange:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardFrameWillChange:)
name:UIKeyboardWillChangeFrameNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
然后,当调用这些通知时,请将视图大小调整为键盘框
CGRect keyboardFrame;
[[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];
CGRect viewFrame = keyboardFrame;