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

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

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

  • (void)show:(NSString *)message yoffset:(float)yoffset toView:(UIView *)view;
    (展示文字提示)
  • (void)showCustomView:(UIView *)view message:(NSString *)message yoffset:(float)yoffset toView:(UIView *)view;(展示自定义视图和文字)

解决思路:
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的关联

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 源码来源:gitHub源码 转载于: CocoaChina 来源:南峰子的技术博客 版本:0.9.1 MBPr...
    李小六_阅读 6,452评论 2 5
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 当指针拖着虚影,无情的滴滴答答转过一圈又一圈后,又走过一个星期。这一个星期,有意间无意间,意料之中意料之外,你与过...
    261ec629fb4d阅读 219评论 0 3
  • 。。。
    _西门吹雪_阅读 152评论 0 1
  • 我从未吃掉一整盘的意大利面 因为里面有洋葱 就如我从未体验过整个人生 因为我是个小孩子 但你可以吃掉所有意面 却永...
    ohmymom阅读 1,634评论 2 9