iOS中需要重新布局的几中情况调用的方法

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中的方法,这两个方法每次启动控制器的时候都会调用两次。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值