Pis:学习了一会markdown语法,正好用来练练手,哈哈。。
刚遇到的问题,还热乎着,正好记录下来,废话不多说,直接进入主题。
一般情况下,app中那种耗时比较久的操作(比如加载数据,网络交互),为了用户更好的体验,我们都会用蒙层来过渡,那么我自定义了一个类,姑且叫它CCLoad,使用非常简单+ (void)showLoadAddToSuperView:(UIView *)superView;
这个方法中定义了一个不透明的视图,上面有个居中的加载动画,读取superView的bounds,然后添加到superView上,过程很理想。
那么问题来了
在iPhone5上没有问题,在iPhone6和6p上我发现动画的位置缩在左上角,为了解决这个问题,我是这么做的:
在iPhone6模拟器下,在调用这句话的地方(viewDidLoad中)打印了当前Controller.view的Frame,如下
self.view x:0, y:0, w:600, h:600
是不是很奇怪,苹果6的宽高怎么是这个样子??不急,耐心看下去我在viewWillAppear viewDidAppear分别打印了frame,结果如下
self.view x:0, y:0, w:600, h:600
self.view x:0, y:64, w:375, h:603
viewDidAppear调用时才正常,猜想可能因为是viewDidAppear与前两个不是同一个runLoop导致的,而且以前用代码生成VC就没有这个问题。
怎么解决这个问题?
当然是借鉴下强大的MBProgressHUD,发现有段代码如下
- (void)layoutSubviews {
[super layoutSubviews];
UIView *parent = self.superview;
if (parent) {
self.frame = parent.bounds;
layoutSubviews这个方法是 父View addsubview的时候会自动调用,在这里重新获取一下父View的bounds,有效吗?试一下不就知道了,我这么改的
- (void)layoutSubviews {
[super layoutSubviews];
UIView *parent = self.superview;
if (parent) {
self.frame = parent.bounds;
backView.center = self.center;
}
}
问题解决了。。猜想可能在addsubview的时候,父View已经确定好了自己的frame。。