采用MBProgressHUD,防止tip和loading不被键

2016-12-19  本文已影响0人  yangwawa1993

背景:采用MBProgressHUD(0.9),封装Tip和Loading,在短屏上面出现被键盘遮住的问题。

Tip和Loading都有两个基础方法(下面以Tip为例):

解决思路:
1.判断tip框是否被键盘遮住,如果被遮住,则修改yoffset的值,使其显示在键盘上方;否则不做处理。
2.将tip加到最上层的window上。这样有问题:键盘对应的window,在不同的操作系统版本下表现不一样。排除该方法。

采用方法1,有个最核心的问题:获取tip相对于屏幕的frame。而MBProgressHUD提供的size属性必须要调用layoutSubviews方法后,才会计算。
所以通过layoutIfNeeded提前调用layoutSuviews,这样可以获得正确的frame,但是,这样会导致更改yoffset之后,hud的背景会移动,customView不会移动。究其原因是因为,hud内部在drawRect方法里绘制的,所以背景会移动。而customView是在layoutSubviews里布局的,在手动调用layoutSubviews后,needLayoutSubviews标志位为NO,导致不会调用layoutSubviews。
解决办法:在调用layoutSubviews后,手动调用setNeedsLayout。

坑:
1.addSuview会移除superView的关联

上一篇 下一篇

猜你喜欢

热点阅读