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






你可能感兴趣的:(iOS/oc)