iOS 打开热点分享时页面下移的简单适配

问题描述:

    当iPhone打开热点分享时,屏幕整体会下移20pt,导致对应的controller.view的高度减小20,当热点关闭后,屏幕上移,view恢复原来的高度。demo下载地址


解决办法:

1.用masonry做好约束处理。例如:放置一个距离底部10的bottomview的话,如果高度相对位置的话,当热点分享打开,父视图整体下移,就会遮挡住一部分bottomview,如果用masonry做约束来添加的话,就不会出现这个问题。但是要注意的是,当mas采用从上到下的布局时,要规划好纵向上的约束问题,例如纵向方向上的约束优先级设置,防止再次出现视图下移时被遮挡的问题。

2.监听系统状态栏的改变,计算出每次view高度的该变量将其作用在子view的y上,自己对子视图做相应处理。如果用frame布局的话,如下

CGFloat height = self.view.frame.size.height;

CGFloat width = self.view.frame.size.width;


oldHeight = height;


self.bottomView = [[UIView alloc]initWithFrame:CGRectMake(10, height-40, width-20, 40)];

self.bottomView.backgroundColor = [UIColor redColor];

[self.view addSubview:self.bottomView];

要添加如下通知

[[ NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layoutControllerSubViews) name: UIApplicationDidChangeStatusBarFrameNotification object : nil ];

并在触发方法里实现对子视图的重新布局

- (void)layoutControllerSubViews

{

    self.logLabel.text = [NSString stringWithFormat:@"%f"  ,self.view.frame.size.height];

    

//当状态栏的高度变化后,因为view的高度会变小20,所以要重新获取view的高度刷新子视图的高度

    CGFloat newHeight = self.view.frame.size.height;

    CGRect frame = self.bottomView.frame;

    frame.origin.y += newHeight-oldHeight;

    self.bottomView.frame = frame;

    

    oldHeight = newHeight;

}


3.使用VC自带的方法。

- (void)viewWillLayoutSubviews

在这个方法里处理基本上跟第二种方法处理的一样。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值