2017-09-24 3 views
15

La création d'une barre de navigation transparente ne fonctionne plus avec ios 11. Cette barre noire est située en haut car la vue de la table ne se trouve plus sous la barre (les incrustations dans le storyboard sont correctement définies à partir de 0) Des idées pourquoi?Barre de navigation transparente ios 11

enter image description here

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 
self.navigationController?.navigationBar.shadowImage = UIImage() 
self.navigationController?.navigationBar.isTranslucent = true 
+0

Avez-vous essayé d'ajouter également self.navigationController? .navigationBar.backgroundColor = UIColor.clear? – Tom

+0

Oui, je l'ai fait. Même résultat –

+0

Toujours le même résultat –

Répondre

13

ancienne:

si vous avez utilisé tableView, ajoutez le code:

if (@available(iOS 11.0, *)) { 
    self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; 
} else { 
    self.automaticallyAdjustsScrollViewInsets = NO; 
} 

nouvelle:

un changement de automatiquementAdjustsScr ollViewInsets à iOS11:

@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets 
API_DEPRECATED_WITH_REPLACEMENT("Use UIScrollView's 
contentInsetAdjustmentBehavior instead", ios(7.0,11.0),tvos(7.0,11.0)); 
// Defaults to YES 

à propos contentInsetAdjustmentBehavior:

typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) { 
    UIScrollViewContentInsetAdjustmentAutomatic, // Similar to .scrollableAxes, but will also adjust the top & bottom contentInset when the scroll view is owned by a view controller with automaticallyAdjustsScrollViewContentInset = YES inside a navigation controller, regardless of whether the scroll view is scrollable 
    UIScrollViewContentInsetAdjustmentScrollableAxes, // Edges for scrollable axes are adjusted (i.e., contentSize.width/height > frame.size.width/height or alwaysBounceHorizontal/Vertical = YES) 
    UIScrollViewContentInsetAdjustmentNever, // contentInset is not adjusted 
    UIScrollViewContentInsetAdjustmentAlways, // contentInset is always adjusted by the scroll view's safeAreaInsets 
} API_AVAILABLE(ios(11.0),tvos(11.0)); 

/* Configure the behavior of adjustedContentInset. 
Default is UIScrollViewContentInsetAdjustmentAutomatic. 
*/ 
@property(nonatomic) UIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior API_AVAILABLE(ios(11.0),tvos(11.0)); 

il pourrait être un problème de safeArea pour iOS11. essayer cette définition d'un expert:

#define adjustsScrollViewInsets_NO(scrollView,vc)\ 
do { \ 
    _Pragma("clang diagnostic push") \ 
    _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \ 
     if ([UIScrollView instancesRespondToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\ 
      [scrollView performSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)];\ 
     } else {\ 
      vc.automaticallyAdjustsScrollViewInsets = NO;\ 
     }\ 
    _Pragma("clang diagnostic pop") \ 
} while (0) 
7

J'ai eu un problème similaire. J'ai mis "Edges étendus: Sous haut/bas/barre opaque" vrai pour UIViewController dans le storyboard. Like this. Vous pouvez également essayer de désactiver "Automatically Adjusts Scroll View Insets"

+0

J'avais déjà en haut et en bas vérifié, mais pas opaque. Vérification tous les trois fixé le problème. –

4

J'ai fait face au même problème et j'ai pu le résoudre. Voici ce qui fonctionne pour moi:

public override func viewDidLoad() { 
    super.viewDidLoad() 

    self.navigationController?.navigationBar.backgroundColor = UIColor.clear 
    self.navigationController?.navigationBar.isTranslucent = true 
    if #available(iOS 11.0, *) { 
     collectionView.contentInsetAdjustmentBehavior = .never 
    } else { 
     // Fallback on earlier versions 
    } 
} 

Et une chose, que je trouve encore nécessaire pour le faire fonctionner. Vous avez très probablement aligné votre UICollectionView/UITableView/UIScrollview en haut de Safe Area. Modifiez cette contrainte pour qu'elle soit alignée sur le haut de la super vue à la place.

enter image description here

Et voilà. N'est-ce pas simple et intuitif? Merci Apple.