美文网首页
iOS 14.0 UIPageControl不起效果

iOS 14.0 UIPageControl不起效果

作者: 刃之剑 | 来源:发表于2021-08-29 16:13 被阅读0次

    在旧的系统版本下,UIpagecontrol布局如下:

    _pageControl.frame = CGRectMake(0, Frame_PAD(476), Frame_PAD(290), 7);
    _pageControl.centerX = self.bannerView.centerX;
    

    问题:这段代码,在iOS14以下的设备可以正常布局,可在iOS14的设备上,就出现了圆点不显示的问题,查看树结构发现,并不是控件出了问题,是UIpagecontrol的子视图的布局发生了改变。背景:从iOS14开始,苹果对UIpagecontrol组件进行了优化,提供了不少新的API,也支持了更多的特效(具体的功能此处不赘述,请查看头文件或者百度)。在众多的特效中,有一个特效是苹果对UIpagecontrol的宽度不再固定死,会随着page的个数去自动调整,同时也会调整小圆点的大小。基于上述苹果特效的更新,也导致了我们上文中的代码失效。因为我们在设置好UIpagecontrol的frame之后,UIpagecontrol内部绘制的时候,会根据page的个数去调整宽度,将我们设置好的frame修改掉。解决方案:1、masonry布局:将frame布局替换成masonry的方式:不给UIpagecontrol设置宽度的约束,让系统内部去调整,只做高度和位置的限定即可,如下代码:

            [_pageControl mas_makeConstraints:^(MASConstraintMaker *make) {
                make.centerX.equalTo(0);
                make.top.offset(Frame_PAD(476));
                make.height.offset(7);
            }];
    

    2、frame布局:除了实例化UIpagecontrol对象时进行设置frame外,需要在layoutSubviews将系统修改后的frame重新改回来,如下:

    - (void)layoutSubviews {
        //这句一定要有
        [super layoutSubviews];
        CGRect frame = self.pageControl.frame;
        frame.size.width = [self.pageControl sizeForNumberOfPages:self.pageControl.numberOfPages].width;
        frame.origin.x = (Frame_PAD(290) - frame.size.width)/2;
        self.pageControl.frame = frame;
        self.pageControl.centerX = self.bannerView.centerX;
    }
    

    注意:[super layoutSubviews]方法一定要调用,否则frame重新设置的时机不对,不起效果

    相关文章

      网友评论

          本文标题:iOS 14.0 UIPageControl不起效果

          本文链接:https://www.haomeiwen.com/subject/mptgiltx.html