iOS11中navigationBar上 按鈕圖片設定frame無效 不受約束 產生錯位問題 解決

來源:互聯網
上載者:User

標籤: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無效 不受約束 產生錯位問題 解決

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.