自动布局与自定义键盘中的高度约束冲突



我正在为 iPhone 和 iPad 开发一个自定义的多语言键盘,但我遇到了一个 UI 问题,在设备方向改变的情况下,我无法保留正确的 UI。

我的最终目标是在横向+纵向模式+iPhone + iPad设备中实现更高的键盘高度(带有建议的默认ios键盘高度)。

但是一旦我启动并运行自动调整大小(不是自动布局),我就无法对键盘高度添加约束(在 Xib 文件中禁用自动布局)。

如果我通过启用自动布局来添加约束,我会丢失子视图的自动调整大小,以便它们根据设备屏幕自行调整它们。

我的基本问题是我不知道该走哪条路,所以我只能专注于那里。

以下是我用于以编程方式添加约束的代码。

- (void)updateViewConstraints {
    [super updateViewConstraints];
    CGFloat _expandedHeight = 273;
    NSLayoutConstraint *_heightConstraint =
    [NSLayoutConstraint constraintWithItem: self.view
                                 attribute: NSLayoutAttributeHeight
                                 relatedBy: NSLayoutRelationEqual
                                    toItem: nil
                                 attribute: NSLayoutAttributeWidth
                                multiplier: 0.0
                                  constant: _expandedHeight];
    [self.view addConstraint: _heightConstraint];

}
-(void)viewDidAppear:(BOOL)animated {
    self.inputView = (UIInputView *)Keyboard;
        [self updateViewConstraints];
}
-(void)viewWillAppear:(BOOL)animated{
    NSLog(@"viewWillAppear");
}
-(void)viewWillLayoutSubviews{
    NSLog(@"viewWillLayoutSubviews");
    [self updateViewConstraints];
}

任何建议都会很棒!提前谢谢。

避免键盘扩展中的约束冲突的最佳方法是:

  1. 创建将包含所有子视图的键盘背景视图的键盘。
  2. 仅自动布局键盘背景视图使用根键盘控制器视图使背景视图与根视图具有相同的框架。不要自动布局所有其他子视图。
  3. 手动布局所有键盘子视图viewDidLayout调用后根键盘控制器的子视图 [super viewDidLayoutSubviews] .

此外,通过这样做,键盘扩展启动速度将大大提高,因为自动布局计算的数量要少得多。

最新更新