在Swift ios中将方向更改为横向模式时隐藏底部视图

时间:2015-09-08 07:54:27

标签: ios swift orientation nslayoutconstraint

我有一个UIView和一个UITableView在纵向模式下共享屏幕,高度相等。

现在,当方向更改为横向模式时,如何隐藏表格视图并使用UIView填充整个屏幕。并以纵向模式恢复UITableView和UIView。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我建议你在ViewController中实现viewWillTransitionToSize

var landscapeViewFrame = CGRect()
var landscapeTableViewFrame = CGRect()
var portraitViewFrame = CGRect()
var portraitTableViewFrame = CGRect()

override func viewDidLoad() {
    super.viewDidLoad()
    landscapeViewFrame = CGRectMake(0, 0, view.frame.width / 2, view.frame.height)
    landscapeTableViewFrame = CGRectMake(view.frame.width, 0, view.frame.width / 2, self.view.frame.height);
    portraitViewFrame = view.bounds
    portraitTableViewFrame = CGRectMake(0,0,0,0);
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    let isPortrait = (size.height > size.width);
    yourView.frame = isPortrait ? portraitViewFrame : landscapeViewFrame
    yourTableView.frame = isPortrait ? portraitTableViewFrame : landscapeTableViewFrame
    yourTableView.hidden = isPortrait
}

viewWillTransitionToSize通知你的viewController视图框架将会改变。 UIViewControllerTransitionCoordinator包含有关动画的信息,例如持续时间/如果设置为动画。

现在在swift中

更新。 基本思路:计算之前的指定帧。在设备轮换更改时,将调用viewWillTransitionToSize并可以设置视图的框架。如前所述,您可能需要动画才能使一切看起来流畅

答案 1 :(得分:0)

1.首先在您的项目中设置设备旋转>常规>设备旋转

2在你的viewwillappear中写下

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(orientationChanged:)`  name:UIDeviceOrientationDidChangeNotification  object:nil];
  1. 将这些方法写入您想要的帧或要隐藏或取消隐藏的视图

    - (void)orientationChanged:(NSNotification *)notification
    {
        [self handleOrientation:[[UIApplication sharedApplication] statusBarOrientation]];
    }
    
    
    - (void) handleOrientation:(UIInterfaceOrientation) orientation {
    
         if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
         {
             //handle the portrait view
         }
         else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
         {
              //handle the landscape view
         }
    }