19

我已经实现了自定义输入附件视图,它在 iOS 10.3.1 之前工作正常。但它在 iOS 11 测试版中不可见。

有没有人遇到过这个问题?

4

8 回答 8

21

你问的问题没有太多细节。但是在为文本字段使用 inputAccessoryView 和自定义 inputView 时,我遇到了同样的问题。

并通过将自定义 inputView 的 autoresizingMask 设置为 .flexibleHeight 在 iOS11 上解决了这个问题。

yourCustomInputView.autoresizingMask = .flexibleHeight

希望这可以解决问题。如果没有,也许可以提供更多信息?

这是我添加输入附件的方法,以防这有更多帮助(作为文本字段的扩展):

public extension UITextField {

public func addToolbarInputAccessoryView(barButtonItems: [UIBarButtonItem],
                                         textColour: UIColor,
                                         toolbarHeight: CGFloat = 44,
                                         backgroundColour: UIColor = .white) {

    let toolbar = UIToolbar()

    toolbar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: toolbarHeight)
    toolbar.items = barButtonItems
    toolbar.isTranslucent = false
    toolbar.barTintColor = backgroundColour
    toolbar.tintColor = textColour

    inputAccessoryView = toolbar
}

}

然后在inputView(不是inputAccessoryView)上,例如,我使用了日期选择器 - 只需确保将日期选择器的自动调整大小掩码设置为灵活高度。

于 2017-07-04T07:58:30.950 回答
8

PSA:如果您使用 UIToolbar 作为自定义视图,它目前在 iOS 11 GM 中被破坏。与其在如何修复它上费尽心思,只需将其更改为 UIView 即可。你会失去模糊效果,但它会起作用。

于 2017-09-15T14:57:07.583 回答
5

Beta 3 刚出来,有人说它解决了问题,但对我来说并没有。

然而,我尝试将附件视图设置为一些愚蠢的东西(100pxls 高),并发现 iPad 上的撤消/重做/粘贴栏错误地位于附件栏的顶部。所以我添加了以下代码来摆脱 Apples bar(无论如何这对我的自定义选择器毫无意义)并且问题消失了

希望这可以帮助某人

- (void)textFieldDidBeginEditing:(UITextField*)textField  
{  
    UITextInputAssistantItem* item = [textField inputAssistantItem];  
    item.leadingBarButtonGroups = @[];  
    item.trailingBarButtonGroups = @[];  
}  
于 2017-07-11T09:56:11.303 回答
4

为避免inputAccessoryView在 iOS 11 中出现UITextFieldand的问题UITextView,只需使用以下代码:

UIView *inputView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150)];

self.monthPickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150)];

    self.monthPickerView.backgroundColor = [UIColor whiteColor];

    self.monthPickerView.delegate = self;

    self.monthPickerView.dataSource = self;
[inputView addSubview:self.monthPickerView];

    cell.monthTextField.inputView = inputView ;

self.monthTextField.inputAccessoryView = [self doneButtonAccessoryView];


// doneButtonAccessoryView Method


-(UIToolbar*)doneButtonAccessoryView
{

    UIToolbar *kbToolbar = [[UIToolbar alloc] init];
    [kbToolbar sizeToFit];
    [kbToolbar setBarTintColor:[UIColor whiteColor]];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                   style:UIBarButtonItemStyleDone target:self
                                                                  action:@selector(doneClicked)];

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel"
                                                                     style:UIBarButtonItemStyleDone target:self
                                                                    action:@selector(cancelClicked)];
    NSDictionary *attrDict;

    attrDict = [NSDictionary dictionaryWithObjectsAndKeys:
                [UIFont fontWithName:@"Helvetica-Bold" size:16.0], NSFontAttributeName, nil];
 [doneButton setTitleTextAttributes:attrDict forState:UIControlStateNormal];
    UIBarButtonItem *flexWidth = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                               target:self action:nil];

    [kbToolbar setItems:[NSArray arrayWithObjects:cancelButton,flexWidth, doneButton, nil]];
    return kbToolbar;
}
于 2017-10-16T10:17:58.747 回答
1

UIToolBar 在 iOS 11 中被破坏了。但是你可以使用 UIView 作为 inputAccessoryView 来完成同样的事情。示例代码片段在这里:

CGFloat width = [[UIScreen mainScreen] bounds].size.width;
UIView* toolBar = [[UIView alloc] initWithFrame:CGRectMake(0.0f,0.0f, width, 44.0f)];
toolBar.backgroundColor = [UIColor colorWithRed:0.97f  green:0.97f blue:0.97f alpha:1.0f];

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0 , 0.0f, width, 44.0f)];
[titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:13]];
[titleLabel setBackgroundColor:[UIColor clearColor]];
[titleLabel setTextColor:[UIColor redColor]];
[titleLabel setText:@"Title"];
[titleLabel setTextAlignment:NSTextAlignmentLeft];
[toolBar addSubview:titleLabel];

UIButton *doneBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[doneBtn setTitle:@"Done" forState:UIControlStateNormal];
doneBtn.tintColor = [UIColor colorWithRed:(float)179/255 green:(float)27/255 blue:(float)163/255 alpha:1];
[doneBtn.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:16]];
[doneBtn addTarget:self action:@selector(btnTxtDoneAction) forControlEvents:UIControlEventTouchUpInside];
[doneBtn setFrame:CGRectMake(width-70, 6, 50, 32)];
[toolBar addSubview:doneBtn];

[toolBar sizeToFit];

txtMessageView.inputAccessoryView = toolBar;

希望这有帮助..:)

于 2017-10-04T12:58:05.610 回答
0

以防万一有人可能仍然需要解决方案,这就是我所做的(IOS 12.1);

private func initSearchBox() {
    
    // Add Done button on keyboard      
    txtSearch.delegate = self
    let tbrDone = UIToolbar()
    let btnDone = UIBarButtonItem(title: "Done", style: .plain, target: self, action:     #selector(btnDone_tapped))
    tbrDone.items = [btnDone]
    tbrDone.sizeToFit()
    self.txtSearch.inputAccessoryView = tbrDone
        
}
    
@objc func btnDone_tapped() {

    view.endEditing(true)
        
}

于 2021-04-12T03:12:14.300 回答
0

我遇到了同样的问题,我发现删除分配的视图的所有, bottom, top, leading,training约束解决了它。leftrightaccessoryView

于 2017-08-17T12:19:24.477 回答
0

斯威夫特 4 解决方案

let toolBarRect = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44)
let toolBar = UIView(frame: toolBarRect)
toolBar.backgroundColor = .lightGray

let nextButton = UIButton()
nextButton.setTitleColor(.black, for: .normal)
nextButton.setTitle("Next", for: .normal)
nextButton.addTarget(self, action: #selector(self.onNextButtonTouch), for: .touchUpInside)
nextButton.translatesAutoresizingMaskIntoConstraints = false
toolBar.addSubview(nextButton)

NSLayoutConstraint.activate(
    [
        nextButton.heightAnchor.constraint(equalToConstant: Constants.keyboardToolBarHeight),
        nextButton.trailingAnchor.constraint(equalTo: toolBar.trailingAnchor, constant: -16),
        nextButton.centerYAnchor.constraint(equalTo: toolBar.centerYAnchor, constant: 0)
    ]
)

self.yourTextField.inputAccessoryView = toolBar
于 2019-03-22T10:49:22.443 回答