iOS11 UIToolBar Contentview

iOS 11 les boutons et le champ de texte ne répondent pas étant des sous-vues de UIToolBar. Comparer la hiérarchie des vues à iOS 10 nous voir il y a un _UIToolBarContentView plus de tous les sous-vue d' UIToolBar.

Par exemple, cette nouvelle mise en page de l' UIToolBar breaks slacktextviewcontroller https://github.com/slackhq/SlackTextViewController/issues/604

Besoin d'une solution de travail dans iOS 10/11.

31
demandé sur malex 2017-09-08 05:13:56

5 réponses

Pour résoudre le problème iOS11 (compatible avec les versions inférieures) vous avez seulement besoin pour faire layoutSubview juste après UIToolBar a été ajouté comme sous-vue à la hiérarchie de L'interface utilisateur.

Dans ce cas _UIToolbarContentView lowers à la première sous-vue de UIToolBar, et vous pouvez ajoutez tous vos sous-vues plus haut comme avant.

Par exemple ObjC,

    UIToolbar *toolbar = [UIToolbar new];
    [self addSubview: toolbar];
    [toolbar layoutIfNeeded];

    <here one can add all subviews needed>

Le même problème se produit avec slacktextviewcontroller

28
répondu malex 2017-09-27 13:08:15

j'ai résolu ce problème dans mon cas. - Je réécrire l' layoutSubviews méthode dans la sous-classe de UIToobar et changer le userInteractionEnable_UIToolbarContentView dans les PAS de.

- (void)layoutSubviews {
    [super layoutSubviews];


    NSArray *subViewArray = [self subviews];

    for (id view in subViewArray) {
        if ([view isKindOfClass:(NSClassFromString(@"_UIToolbarContentView"))]) {
            UIView *testView = view;
            testView.userInteractionEnabled = NO;
         }
     }

}
3
répondu dk_checkitPortal 2017-10-25 03:04:30

Vous pouvez simplement utiliser le hitTest(_:with:) méthode.

  1. tout d'abord, créez une propriété contentViewUIToolbar:

    open private(set) var contentView: UIView = UIView()
    
  2. alors, faites le contentView's image le même que le