我有一个UIView和一个UITableView在纵向模式下共享屏幕,高度相等。
现在,当方向更改为横向模式时,如何隐藏表格视图并使用UIView填充整个屏幕。并以纵向模式恢复UITableView和UIView。
提前致谢。
答案 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
包含有关动画的信息,例如持续时间/如果设置为动画。
更新。
基本思路:计算之前的指定帧。在设备轮换更改时,将调用viewWillTransitionToSize
并可以设置视图的框架。如前所述,您可能需要动画才能使一切看起来流畅
答案 1 :(得分:0)
1.首先在您的项目中设置设备旋转>常规>设备旋转
2在你的viewwillappear中写下
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)` name:UIDeviceOrientationDidChangeNotification object:nil];
将这些方法写入您想要的帧或要隐藏或取消隐藏的视图
- (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
}
}