iOS 自定义键盘增加 UIInputViewController 高度

iOS Custom keyboard increase UIInputViewController height

我只是无法理解文档中关于让我的 iOS 自定义键盘高度正常工作的内容。

这是干净的键盘目标并添加了似乎是苹果文档的内容和许多 SO 答案作为正确答案,但它不适用于 XS 和 6S 模拟器:

//
//  KeyboardViewController.m
//  keyboard
//
//  Created by hiwa on 02/04/2019.
//  Copyright © 2019 hiwa. All rights reserved.
//

#import "KeyboardViewController.h"

@interface KeyboardViewController ()
@property (nonatomic, strong) UIButton *nextKeyboardButton;
@end

@implementation KeyboardViewController

- (void)updateViewConstraints {
    [super updateViewConstraints];

    // Add custom view sizing constraints here
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLayoutConstraint *heightConstraint =
    [NSLayoutConstraint constraintWithItem: self.view
                                 attribute: NSLayoutAttributeHeight
                                 relatedBy: NSLayoutRelationEqual
                                    toItem: nil
                                 attribute: NSLayoutAttributeNotAnAttribute
                                multiplier: 0.0
                                  constant: 300];
    [self.view addConstraint: heightConstraint];
}
- (void)viewDidLoad {
    [super viewDidLoad];

    // Perform custom UI setup here
    self.nextKeyboardButton = [UIButton buttonWithType:UIButtonTypeSystem];

    [self.nextKeyboardButton setTitle:NSLocalizedString(@"Next Keyboard", @"Title for 'Next Keyboard' button") forState:UIControlStateNormal];
    [self.nextKeyboardButton sizeToFit];

    [self.nextKeyboardButton addTarget:self action:@selector(handleInputModeListFromView:withEvent:) forControlEvents:UIControlEventAllTouchEvents];

    [self.view addSubview:self.nextKeyboardButton];

}

- (void)textWillChange:(id<UITextInput>)textInput {
    // The app is about to change the document's contents. Perform any preparation here.
}

- (void)textDidChange:(id<UITextInput>)textInput {
    // The app has just changed the document's contents, the document context has been updated.

    UIColor *textColor = nil;
    if (self.textDocumentProxy.keyboardAppearance == UIKeyboardAppearanceDark) {
        textColor = [UIColor whiteColor];
    } else {
        textColor = [UIColor blackColor];
    }
    [self.nextKeyboardButton setTitleColor:textColor forState:UIControlStateNormal];
}

@end

感谢这里的任何提示。

基于开发者代码级别票证:

  1. 将您的按钮添加到 UIView(比如 keysView
  2. keysView 添加到 UIInputViewController 的视图。
  3. 添加问题中的约束条件
  4. 使keysView.frameself.view相同
  5. keysView
  6. 的按钮之一添加至少一个常量

现在您应该有一个扩展的 keysView,它与 self.view 一样高。

完整代码:



#import "KeyboardViewController.h"

@interface KeyboardViewController ()

@property (nonatomic, strong) UIButton *nextKeyboardButton;

@end

@implementation KeyboardViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // (1)
    UIView *keysView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    // (3)
    NSLayoutConstraint *keyboardHeightConstraint = [NSLayoutConstraint
                                                    constraintWithItem:self.view
                                                    attribute:NSLayoutAttributeHeight
                                                    relatedBy:NSLayoutRelationEqual
                                                    toItem:nil
                                                    attribute:NSLayoutAttributeNotAnAttribute
                                                    multiplier:0.0
                                                    constant:310];
    [keyboardHeightConstraint setPriority:UILayoutPriorityDefaultHigh];
    [self.view addConstraints:@[keyboardHeightConstraint]];

    self.nextKeyboardButton = [UIButton buttonWithType:UIButtonTypeSystem];

    [self.nextKeyboardButton setTitle:NSLocalizedString(@"Next Keyboard", @"Title for 'Next Keyboard' button") forState:UIControlStateNormal];
    [self.nextKeyboardButton sizeToFit];
    self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = NO;

    [self.nextKeyboardButton addTarget:self action:@selector(advanceToNextInputMode) forControlEvents:UIControlEventTouchUpInside];

    [keysView addSubview:self.nextKeyboardButton];
    // (5)
    NSLayoutConstraint *nextKeyboardButtonLeftSideConstraint = [NSLayoutConstraint constraintWithItem:self.nextKeyboardButton attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:keysView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0];
    NSLayoutConstraint *nextKeyboardButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:self.nextKeyboardButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:keysView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];
    [keysView addConstraints:@[nextKeyboardButtonLeftSideConstraint, nextKeyboardButtonBottomConstraint]];
    // (4)
    keysView.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
    // (2)
    [self.view addSubview:keysView];
}

- (void)dealloc {
    self.nextKeyboardButton = nil;
}

@end