iOS 11.0 iPhone X safeArea适配

2017-11-07  本文已影响4027人  RunningDu
UIViewController中新增:
- (void)viewSafeAreaInsetsDidChange;
UIView中新增:
- (void)viewSafeAreaInsetsDidChange;
如果屏幕旋转,相应的安全区域也会变化,所以不比担心。
- (void)viewSafeAreaInsetsDidChange {
    [super viewSafeAreaInsetsDidChange];
    
    NSLog(@"viewSafeAreaInsetsDidChange-%@",NSStringFromUIEdgeInsets(self.view.safeAreaInsets));
    
    [self updateOrientation];
}
/**
 更新屏幕safearea frame
 */
- (void)updateOrientation {
    if (@available(iOS 11.0, *)) {
        CGRect frame = self.customerView.frame;
        frame.origin.x = self.view.safeAreaInsets.left;
        frame.size.width = self.view.frame.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right;
        frame.size.height = self.view.frame.size.height - self.view.safeAreaInsets.bottom;
        self.customerView.frame = frame;
    } else {
        // Fallback on earlier versions
    }
}
safeArea.gif

说明:使用xib创建视图,工程适配8.0以上系统,xib inspector中未勾选Safe Aear Layout Guide选项(iOS 9.0前无Safe Area Layout Guide)。其中粉色为当前viewcontroller的view,紫色的部分属于安全区域内部分(自定义视图)。

if (@available(iOS 11.0, *)) {
        self.additionalSafeAreaInsets = UIEdgeInsetsMake(50, 50, 50, 50);
        NSLog(@"additionalSafeAreaInsets-%@",NSStringFromUIEdgeInsets(self.additionalSafeAreaInsets));
        NSLog(@"safeAreaInsets-%@",NSStringFromUIEdgeInsets(self.view.safeAreaInsets));
    } else {
        // Fallback on earlier versions
    }

打印结果如下:

2017-11-07 10:28:04.012543+0800 XIBLayoutDemo[78269:6690668] additionalSafeAreaInsets-{50, 50, 50, 50}
2017-11-07 10:28:04.012737+0800 XIBLayoutDemo[78269:6690668] safeAreaInsets-{0, 0, 0, 0}

但在viewSafeAreaInsetsDidChange方法中监测,已经得到相应的改变:

2017-11-07 10:32:49.425656+0800 XIBLayoutDemo[78269:6690668] viewSafeAreaInsetsDidChange-{50, 50, 84, 50}
2017-11-07 10:32:49.426402+0800 XIBLayoutDemo[78269:6690668] viewSafeAreaInsetsDidChange-{94, 50, 84, 50}
2017-11-07 10:32:49.427091+0800 XIBLayoutDemo[78269:6690668] viewSafeAreaInsetsDidChange-{50, 50, 84, 50}

已经在原来{0,0,34,0}的基础上变为{50,50,84,50},上左下右各增加了50,上图变为下图所示:


iPhone X.png
if (@available(iOS 11.0, *)) {        
        UISearchController *searchVC = [[UISearchController alloc] initWithSearchResultsController:nil];
        searchVC.searchResultsUpdater = self;
        searchVC.searchBar.delegate = self;
        searchVC.searchBar.placeholder = @"填写搜索文字";
        searchVC.searchBar.showsCancelButton = YES;
                
        UITextField *searchField = [searchVC.searchBar valueForKey:@"_searchField"];
        searchField.textColor = [UIColor redColor];
        searchField.returnKeyType = UIReturnKeyGo;
        
        self.navigationItem.searchController = searchVC;
        self.navigationItem.hidesSearchBarWhenScrolling = YES;
    }

进入页面日志打印如下:

2017-11-08 10:27:56.488194+0800 XIBLayoutDemo[82378:7134741] viewSafeAreaInsetsDidChange-{0, 0, 34, 0}
2017-11-08 10:27:56.488650+0800 XIBLayoutDemo[82378:7134741] viewSafeAreaInsetsDidChange-{44, 0, 34, 0}
2017-11-08 10:27:56.489282+0800 XIBLayoutDemo[82378:7134741] viewSafeAreaInsetsDidChange-{0, 0, 34, 0}
searchController.png
上一篇 下一篇

猜你喜欢

热点阅读