博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS中需要重新布局的几中情况调用的方法
阅读量:4291 次
发布时间:2019-05-27

本文共 1867 字,大约阅读时间需要 6 分钟。

1.// 准备布局的时候调用 ,当布局刷新(改变)-----

 这个方法是UICollectionViewLayoutAttributes中的方法

- (void)prepareLayout {

    [superprepareLayout];

}

2.// 当可见范围发生变化的时候就会重新布局-----

这个方法是UICollectionViewLayoutAttributes中的方法

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {

    return YES;

}

3.屏幕发生旋转的时候,会重新布局

下面这两个方法只有在控制器中才能使用,如果在一般的view中使用layoutsubviews;

1.//将要旋转到某个方向的时候调用此方法(iOS8之前)

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

{

    //Landscape : 横屏  Portrait: 竖屏

    

    // 传入一个方向值如果是横屏则返回YES

    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {

        NSLog(@"横屏");

    }

    

    // 传入一个方向值如果是竖屏则返回YES

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {

        NSLog(@"竖屏");

    }

}

2.#pragma mark iOS8以后的方法

// 如果实现了iOS8以后的方法则旧版方法会覆盖

//这是UIViewController的方法

//视图发生了大小改变的时候会调用此方法   大小改变 == 横竖切换

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

{

    NSLog(@"size; %@"NSStringFromCGSize(size));

    

    // 建议如果背景色不一致的情况下做动画同步的处理否则视觉上很不舒服

    

    //动画同步 --> 系统默认0.25 而选择是0.4

    [UIView animateWithDuration:[coordinator transitionDurationanimations:^{

        //方法一:

        if (size.width == HMScreenMaxWidth1024) {

            NSLog(@"横屏");

            self.dockView.width = HMDockMaxWidth;

            self.dockView.height = HMScreenMinWidth768;

        } else {

            NSLog(@"竖屏");

            self.dockView.width = HMDockMinWidth;

            self.dockView.height = HMScreenMaxWidth1024;

        }

    }];

    

    

    

    //方法二

//    if (size.width > size.height) {

//        NSLog(@"横屏");

//    }

    

    //方法三 orientation: 方向

//    if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft || [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) {

//        NSLog(@"横屏");

//    }

}

4.layoutsubViews(一般view的frame发生变化,view中子控件重新布局)-----这个是view中的方法

5.控制器中的方法:viewwilllayoutgubviews,viewDidlayoutsubviewsviews-------这个是viewcontroller中的方法,这两个方法每次启动控制器的时候都会调用两次。

转载地址:http://kelgi.baihongyu.com/

你可能感兴趣的文章
延迟队列有哪些实现方案?说说你的看法
查看>>
厉害了!我们老大半小时把我的springboot项目并发提升几倍
查看>>
Spring 中Bean 的生命周期
查看>>
为什么要用枚举实现单例模式(避免反射、序列化问题)
查看>>
微服务架构下的分布式限流方案思考
查看>>
全网最详细的一篇SpringCloud总结
查看>>
消息中间件中的有序消息,其实是排队但是不能插队
查看>>
不知道分布式事务,还想进互联网大厂
查看>>
mysql为什么使用B+树作为索引的结构
查看>>
mysql索引总结(1)-mysql 索引类型以及创建(文章写的不错!!!)
查看>>
聊聊CAS - 面试官最喜欢问的并发编程专题
查看>>
Spring Boot 中使用一个注解轻松将 List 转换为 Excel 下载
查看>>
高并发环境下,先操作数据库还是先操作缓存?
查看>>
MySQL Explain详解
查看>>
一直搞不清楚什么是读写分离,主从复制的原理,今天总算搞懂了
查看>>
消息队列 mq 必会面试题
查看>>
线程池的工作原理是啥?能手写一个线程池吗?
查看>>
一口气说出 6种 延时队列的实现方案,大厂offer稳稳的
查看>>
原来redis这么简单,跟着文章操作一遍你就会了
查看>>
Redis两种持久化机制RDB和AOF详解(面试常问,工作常用)
查看>>