La création d'une barre de navigation transparente ne fonctionne plus avec ios 11 . Je vois cette barre noire en haut car la vue du tableau n'apparaît plus sous la barre (les incrustations dans le storyboard sont définies correctement à partir de 0) Des idées pourquoi?
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
vieux:
si vous avez utilisé tableView, ajoutez du code:
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
nouveau:
un changement de automatiquementAdjustsScrollViewInsets dans 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 de 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 s'agir d'un problème de safeArea pour iOS11 .
#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)
J'ai rencontré le 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 encore une chose, que j’ai trouvée nécessaire pour le faire fonctionner. Très probablement, votre UICollectionView/UITableView/UIScrollview est alignée sur le haut de la zone sécurisée. Modifiez cette contrainte pour qu'elle soit alignée sur le haut de la super vue.
Et c'est tout. N'est-ce pas simple et intuitif? Merci Apple.
J'ai eu un problème similaire. Je règle "Bords étendus: Sous Barre supérieure/inférieure/opaque" à Vrai pour UIViewController dans le storyboard . Comme ceci. Vous pouvez également essayer de désactiver " Ajuste automatiquement les incrustations d'affichage de défilement "
pour avoir un comportement cohérent entre iOS 10 et 11, essayez de l'ajouter à votre navigationViewController.
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if navigationBar.isTranslucent, #available(iOS 11.0, *) {
viewController.additionalSafeAreaInsets.top = -navigationBar.bounds.height
}
}