完美適配iPhone X手機TabBar移動和跳轉(zhuǎn)的Bug (iOS 11 iPhone X simulator UITabBar icons and titles being rendered on top covering eachother)

經(jīng)過一晚上的不斷努力終于搞明白了ios 11 iPhone X 模擬器上出現(xiàn)TabBar移動和跳轉(zhuǎn)的Bug的原因,都是safeAreaInsets引起的!!!下面是解決問題的代碼:

A: 對應(yīng)的OC代碼:

#import "MyTabBar.h"

@interface MyTabBar()

@property (nonatomic,assign) UIEdgeInsets oldSafeAreaInsets;

@end

@implementation MyTabBar

// 解決iPhone X TabBar跳轉(zhuǎn)問題

- (void) safeAreaInsetsDidChange

{

[super safeAreaInsetsDidChange];

if(self.oldSafeAreaInsets.left != self.safeAreaInsets.left ||

self.oldSafeAreaInsets.right != self.safeAreaInsets.right ||

self.oldSafeAreaInsets.top != self.safeAreaInsets.top ||

self.oldSafeAreaInsets.bottom != self.safeAreaInsets.bottom)

{

self.oldSafeAreaInsets = self.safeAreaInsets;

[self invalidateIntrinsicContentSize];

}

}

// 解決iPhone X TabBar移動的問題

- (CGSize) sizeThatFits:(CGSize) size

{

CGSize s = [super sizeThatFits:size];

if(@available(iOS 11.0, *))

{

CGFloat bottomInset = self.safeAreaInsets.bottom;

if( bottomInset > 0 && s.height < 50) {

s.height += bottomInset;

}

}

return s;

}

}

@end

B: 對應(yīng)的Swift代碼:

class SafeAreaFixTabBar: UITabBar {

var oldSafeAreaInsets = UIEdgeInsets.zero

@available(iOS 11.0, *)

override func safeAreaInsetsDidChange() {

super.safeAreaInsetsDidChange()

if oldSafeAreaInsets != safeAreaInsets {

oldSafeAreaInsets = safeAreaInsets

invalidateIntrinsicContentSize()

superview?.setNeedsLayout()

superview?.layoutSubviews()

}

}

override func sizeThatFits(_ size: CGSize) -> CGSize {

var size = super.sizeThatFits(size)

if #available(iOS 11.0, *) {

let bottomInset = safeAreaInsets.bottom

if bottomInset > 0 && size.height < 50 {

size.height += bottomInset

}

}

return size

}

}

把上面的代碼放在繼承UITabBar的子類里面,然后在UITabBarControler的子類里面[self setValue:tabBar forKeyPath:@"tabBar"];即可。

附:老外的文章鏈接:https://stackoverflow.com/questions/46214740/ios-11-iphone-x-simulator-uitabbar-icons-and-titles-being-rendered-on-top-coveri

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 原文地址:快速自動化適配iPhone X 關(guān)于iPhone X的適配,主要需要做的工作點就是針對上下非安全區(qū)域的適...
    默默_David閱讀 1,286評論 0 4
  • 文/雒宏軍 工作之后讀書,純屬個人行為。每個人都有自己的閱讀習(xí)慣,有些人喜歡瀏覽,有些人喜歡精讀,有些人喜歡摘抄,...
    雒宏軍的菜園子閱讀 606評論 0 2
  • 灰燼 文:孤獨的伴郎 我本來以為, 你只是一個微弱的火苗, 可以點亮我黑夜里熄滅著的 孤燈! 可是, 當(dāng)...
    孤獨的伴郎閱讀 232評論 2 1
  • 學(xué)習(xí)完畢,午飯時間,大家議論紛紛,我壓根不想?yún)⑴c,因為,抨擊別人不是我所喜歡的,對于別人的是是非非,更不愿意去評判...
    圖圖媽媽小麗閱讀 176評論 0 0
  • 沙漠 一拳黃沙 吞 你說的 生機 在哪?
    阿渙閱讀 101評論 3 1