修改:我已更新问题和标题。似乎问题是在我自己的init中添加的UIView实际上并没有做除旋转之外的任何事情。我是否真的必须为UIView处理旋转?我试了[self.overlay addConstraints:[self.view constraints]];
没有运气。我意识到这可以通过[self.overlay setFrame:self.view.frame];
内的viewDidAppear
来修复,但我宁愿永远不要在该方法中执行任何。
到目前为止,我一直使用Storyboard来设计我的视图控制器。这次,我只是编写几行代码来显示视图,但似乎控制器init中创建的视图不会考虑我的方向。使用Storyboard并按名称等实例化ViewController,它可以工作。现在,我自己实例化,使用自定义init方法,我认为这是问题所在。我的自定义ViewController只有这个init方法和一些旋转委托:
-(id)initWithURL:(NSURL*)url
{
self = [super init];
if(self)
{
self.overlay = [[UIView alloc] initWithFrame: self.view.frame];
self.overlay.backgroundColor = [UIColor grayColor];
[self.view addSubview:self.overlay];
self.url = url;
}
return self;
}
/* viewDidLoad etc.. */
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeLeft;
}
为了以模态方式显示,我在当前显示的控制器中使用它:
CustomViewController *cvc = [[CustomViewController alloc] initWithURL: url];
[cvc setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:cvc animated:YES completion:nil];
(或任何其他transitionStyle)
结果如下图所示:
灰色区域是CustomViewController中的新UIView,它在init中创建。黑色区域为self.view
,并且对齐正确。如果我允许纵向和旋转,它会在纵向上完美对齐,但从不在横向上对齐。在所呈现的模态customViewController中似乎self.overlay
将无法正确旋转。 我是否通过替换任何init
方法或其他内容来覆盖某些规则?通过故事板执行此操作时,它会在横向上正确显示。
答案 0 :(得分:0)
在这里回答我自己的问题。事实证明,添加的UIView确实是旋转的,但没有改变它的宽度和高度在横向,因此比屏幕更高,而且太薄。设置autoresizeMask修复了我的问题:
overlay = [[UIView alloc] initWithFrame:self.view.bounds];
[overlay setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];