it-swarm.com.de

Benutzerdefinierte Tastatur InputAccessoryView in iOS 11 nicht sichtbar

Ich habe die Custom-Ansicht für Zubehör implementiert, die bis iOS 10.3.1 einwandfrei funktionierte. Es ist jedoch in der Beta von iOS 11 nicht sichtbar.

Hat jemand dieses Problem erfahren?

13
Ruchi

Die Frage, die Sie stellen, hat nicht viel Detail. Ich hatte jedoch das gleiche Problem, wenn ich ein inputAccessoryView und ein benutzerdefiniertes inputView für das Textfeld verwende. 

Dieses Problem wurde unter iOS11 behoben, indem die autoresizingMask der benutzerdefinierten inputView auf .flexibleHeight gesetzt wurde.

yourCustomInputView.autoresizingMask = .flexibleHeight

Hoffe, das löst das Problem. Wenn nicht vielleicht weitere Informationen?

So füge ich das Eingabezubehör hinzu, falls dies (als Erweiterung des Textfelds) hilfreich ist:

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
}

}

Und auf dem inputView (nicht dem inputAccessoryView ) verwendete ich beispielsweise einen Datumsauswahl - vergewissern Sie sich, dass die automatische Größenänderungsmaske der Datumsauswahl auf flexible Höhe eingestellt ist.

12
Jess

PSA: Wenn Sie eine UIToolbar als benutzerdefinierte Ansicht verwenden, ist sie derzeit in iOS 11 GM . Defekt. Anstatt Ihr Haar zu verlieren, wie Sie es reparieren, ändern Sie es in UIView ..__ Verlieren Sie den Unschärfe-Effekt, aber es funktioniert.

8
ahbou

Beta 3 ist gerade herausgekommen und einige Leute sagten, es habe das Problem gelöst, aber für mich nicht.

Ich habe jedoch versucht, die Zubehöransicht auf etwas Dummes (100pxls hoch) zu setzen, und habe festgestellt, dass die Leiste zum Rückgängigmachen/Wiederherstellen/Einfügen auf den iPads falsch über meiner Zubehörleiste saß von Apples Bar (es war sowieso für meinen Custom Picker sinnlos) und das Problem ging weg

Hoffe das hilft jemandem

- (void)textFieldDidBeginEditing:(UITextField*)textField  
{  
    UITextInputAssistantItem* item = [textField inputAssistantItem];  
    item.leadingBarButtonGroups = @[];  
    item.trailingBarButtonGroups = @[];  
}  
5
user2843570

Um das Problem inputAccessoryView in iOS 11 für UITextField und UITextView zu vermeiden, verwenden Sie einfach den folgenden Code:

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;
}
3
Rizwan Shaikh

Ich hatte das gleiche Problem und habe herausgefunden, dass das Entfernen aller bottom, top, leading, training, left, right Einschränkungen für die accessoryView-Sicht gelöst wurde.

0
oronbz

UIToolBar ist in iOS 11 defekt. Sie können jedoch auch UIView als inputAccessoryView verwenden. Beispielcode-Ausschnitt hier:

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;

Ich hoffe das hilft..:)

0
christijk

Swift 4 Lösung

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
0
IvanPavliuk