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

时间:2015-03-10 08:35:12

标签: ios objective-c autolayout constraints custom-keyboard

我正在为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 个答案:

答案 0 :(得分:0)

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

  1. 创建一个包含所有子视图的键盘背景视图 一个键盘。
  2. 仅自动关闭键盘背景视图 使用根键盘控制器视图使背景视图与根视图具有相同的框架。不要自动布局所有其他 子视图。
  3. 手动布局所有键盘子视图 调用后的根键盘控制器的viewDidLayoutSubviews [super viewDidLayoutSubviews]
  4. 此外,通过这样做,键盘扩展启动速度将大大提高,因为自动布局计算的数量要少得多。