標籤:tor com play ios1 under uicolor name .com hone
問題描述:
正常樣式:
在iOS 11 iPhone X上顯示效果:
觀察頂部navBar上的左側按鈕 在ios 11 上 這個按鈕的圖片不受設定的尺寸約束,按其真實大小展示,造成圖片錯位,影響介面展示效果.
問題原因:
不知道這個問題是ios11的一個bug還是ios11的一個新更新,在之前的系統上一直未出現這個問題.我們建立一個25*25的按鈕 用來展示帳戶圖片 並接收點擊事件作出相應操作.
我們發現:
如果圖片大小大於按鈕設定的大小 ,設定的button的frame將不起作用。系統將採用最大地區展示。圖片大小小於設定的button的frame時 不會出現這個問題。
leftButton = [[CDLeftBtn alloc]init]; leftButton.layer.masksToBounds = YES; leftButton.frame = CGRectMake(0, 0, 25, 25); leftButton.layer.cornerRadius = 12.5;
[CDUtils displayLeftBtnImageWithUrlUnderMyIcon:icon.length>0?icon:[CDUser currentUser].avatarUrl button:leftButton];
[leftButton addTarget:self action:@selector(leftBtnCilck) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithCustomView:leftButton]; self.navigationItem.leftBarButtonItem = leftItem;
但是由於圖片大小無法控制 所以只能另想辦法解決
通過查閱相關資料 發現有幾個方法可以解決這個問題,先說一下我採用的方法:把button放進view裡邊然後再用UIBarButtonItem的初始化方法 這樣就不會出現這個問題
//添加一個view 用來存放btn UIView *iconBgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 25, 25)]; leftButton = [[CDLeftBtn alloc]init]; leftButton.layer.masksToBounds = YES; leftButton.frame = CGRectMake(0, 0, 25, 25); leftButton.layer.cornerRadius = 12.5; [CDUtils displayLeftBtnImageWithUrlUnderMyIcon:icon.length>0?icon:[CDUser currentUser].avatarUrl button:leftButton]; [iconBgView addSubview:leftButton]; [leftButton addTarget:self action:@selector(leftBtnCilck) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithCustomView:iconBgView]; self.navigationItem.leftBarButtonItem = leftItem;
以上方法就可以解決這個問題 但是具體原因與原理沒搞清楚 但是可以用來解決問題 個人覺得是再次強制限制式btn的尺寸 使其圖片得到約束
另外也可以通過用 iOS 推薦的方式建立按鈕 來避免這個問題
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"d"] style:UIBarButtonItemStyleDone target:self action:@selector(baseReturnAction)]; item.tintColor = [UIColor whiteColor]; viewController.navigationItem.leftBarButtonItem = item;
這個方法真實性沒有考察
參考資料
iOS 11 適配的參考資料:
Cheny的部落格
看我的大白眼
iOS11中navigationBar上 按鈕圖片設定frame無效 不受約束 產生錯位問題 解決