在做iOS 15的適配過程中髓霞,導(dǎo)航欄適配遇到了一個奇怪的問題茅诱,就是原來隱藏的返回按鈕的文字,失效了檩赢。
上代碼
// AppDelegate.m
// 定制返回按鈕
UIImage *backButtonImage = [[UIImage imageNamed:@"custom_back_icon"] imageWithPadding:UIEdgeInsetsMake(8, 8, -8, 0)];
// 隱藏返回按鈕文字
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, -200) forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
// 導(dǎo)航欄樣式
[[UINavigationBar appearance] setTintColor:[UIColor colorFromHex:@"#1B1C33"]];
[[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setBackIndicatorImage:backButtonImage];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButtonImage];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
UIColor *color = [UIColor blackColor];
UIFont *font = [UIFont fontWithName:@"PingFangSC-Medium" size:17.0f];
[dict setObject:color forKey:NSForegroundColorAttributeName];
[dict setObject:font forKey:NSFontAttributeName];
[[UINavigationBar appearance] setTitleTextAttributes:dict];
// iOS 15適配
if (@available(iOS 13.0, *)) {
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
[appearance setBackgroundColor:[UIColor whiteColor]];
[appearance setShadowImage:[UIImage createImageWithColor:[UIColor whiteColor]]];
appearance.titleTextAttributes = dict;
[appearance setBackIndicatorImage:backButtonImage transitionMaskImage:backButtonImage];
[[UINavigationBar appearance] setScrollEdgeAppearance: appearance];
[[UINavigationBar appearance] setStandardAppearance:appearance];
}
我將最后的iOS 15適配的內(nèi)容注釋掉吕嘀,則導(dǎo)航欄返回按鈕的文案可以正常隱藏,加上這段邏輯則不能隱藏。有大佬遇到過這類問題嗎偶房?求助大佬幫忙看看趁曼。
后來參考了overstackflow上的解決辦法,解決了此問題棕洋。根本原因是 UINavigationBarAppearance 的配置會覆蓋原有的配置導(dǎo)致隱藏返回按鈕文案失效挡闰。代碼如下
// iOS 15適配
if (@available(iOS 15.0, *)) {
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
[appearance setBackgroundColor:[UIColor whiteColor]];
[appearance setShadowImage:[DFCMacros createImageWithColor:[UIColor whiteColor]]];
appearance.titleTextAttributes = dict;
[appearance setBackIndicatorImage:backButtonImage transitionMaskImage:backButtonImage];
// UINavigationBarAppearance 會覆蓋原有的導(dǎo)航欄設(shè)置,這里需要重新設(shè)置返回按鈕隱藏
appearance.backButtonAppearance.normal.titlePositionAdjustment = UIOffsetMake(NSIntegerMin, -200);
[[UINavigationBar appearance] setScrollEdgeAppearance: appearance];
[[UINavigationBar appearance] setStandardAppearance:appearance];
}
stackoverflow問題地址 https://stackoverflow.com/questions/59882220/uibarbuttonitem-setbackbuttontitlepositionadjustment-doesnt-work