記錄兩個最近開發中遇到的兩個問題swift
iOS 11 中導航欄在使用過程當中 item 發生位置偏移,效果如圖:markdown
基類中:XYNavigationController中ide
分類中:UIBarButtonItem (XYAdd)spa
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if (self.childViewControllers.count > 0) { //非rootViewController // 設置返回按鈕 【這裏必須用系統方法建立,使用自定義 View 設置 item 會發生偏移】 //viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithimage:[UIImage imageNamed:@"navigationButtonReturn"] selImage:[UIImage imageNamed:@"navigationButtonReturnClick"] target:self action:@selector(back)]; //返回 viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"navigationButtonReturn"] style:UIBarButtonItemStylePlain target:self action:@selector(back)]; viewController.navigationItem.leftBarButtonItem.tintColor = [UIColor blackColor]; viewController.hidesBottomBarWhenPushed = YES; } [super pushViewController:viewController animated:animated]; } - (void)back{ [self popViewControllerAnimated:YES]; }
+ (UIBarButtonItem *)xy_itemWithTarget:(id)target action:(SEL)action title:(NSString *)title{ UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStylePlain target:target action:action]; item.tintColor = [UIColor blackColor]; return item; }
Swift 下同時設置了UIButton 的 title 和 image ,title沒法正確顯示。
這應該是 Swift 的一個bug,項目中若是須要此功能,正確的實現方式應該是設置 Button 的不一樣狀態下的背景圖code
optionBtn.setBackgroundImage(UIImage(named: "btn_image_normal"), for: .normal) optionBtn.setBackgroundImage(UIImage(named: "btn_answer_highlighted"), for: .highlighted) //optionBtn.setImage(UIImage(named: "btn_image_normal"), for: .normal) //optionBtn.setImage(UIImage(named: "btn_answer_highlighted"), for: .highlighted) optionBtn.setTitle("按我", for: .normal) optionBtn.setTitle("按我", for: .highlighted) optionBtn.setTitleColor(UIColor.black, for: .normal) optionBtn.setTitleColor(UIColor.black, for: .highlighted)