在横向模式下添加 UIView

Posted

技术标签:

【中文标题】在横向模式下添加 UIView【英文标题】:Add UIView in Landscape mode 【发布时间】:2014-04-15 08:06:10 【问题描述】:

我需要在我的ios 应用程序中添加广告功能。广告屏幕会在一段时间后出现。我的整体仅处于横向模式。当我尝试在当前视图上添加视图时,它会以纵向模式而不是横向模式显示视图。我已经设置了视图框架,即CGSizeMake(0,0, 568, 320)

  time = [NSTimer scheduledTimerWithTimeInterval:2.0f 
                                          target:self 
                                        selector:@selector(showfirstad) 
                                        userInfo:nil 
                                         repeats:YES];
-(void)showfirstad 
   [[[[UIApplication sharedApplication] windows] lastObject] addSubview:firstad];

看起来像这样。

【问题讨论】:

@Agent 我需要以横向模式而不是纵向模式显示视图。 请发一个firstad代码sn-p @cyborg86pl 我在xib中做了视图 【参考方案1】:
_window = [UIApplication sharedApplication].keyWindow;
if (!_window) _window = [[UIApplication sharedApplication].windows objectAtIndex:0];

UIInterfaceOrientation orientation = self.window.rootViewController.interfaceOrientation;
// Set appropriate view frame (it won't be autosized by addSubview:)
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];

if (UIInterfaceOrientationIsLandscape(orientation))

    // Need to flip the X-Y coordinates for landscape
    self.view_login.frame = CGRectMake(appFrame.origin.y, appFrame.origin.x, appFrame.size.height, appFrame.size.width+20);
else

    self.view_login.frame = appFrame;



[[[_window subviews] objectAtIndex:0] addSubview:self.view_login];

【讨论】:

【参考方案2】:

您的 UIView 以纵向显示而应用程序的其余部分以横向显示的原因是因为您将 UIView 添加为窗口的子视图,而不是将其添加为视图控制器视图的子视图。这会将其置于通过自动旋转自动转换的视图层次结构之外。

应用程序的窗口对象通过查找具有相应视图控制器的最顶层子视图来协调自动旋转。在设备旋转时,窗口在此视图控制器上调用 shouldAutorotateToInterfaceOrientation: 并根据需要转换其视图。如果您希望视图自动旋转,它必须是该视图层次结构的一部分。

因此,不要使用[window addSubview:UIView];,而是执行[self.view addSubview:UIView]; 之类的操作

【讨论】:

但我需要在最顶层的控制器上添加视图。为此,我使用 window 而不是 self.view【参考方案3】:

在使用 addSubview:myView 时,我遇到了与旋转和自动布局相同的问题。 我设法通过使用标准容器控制器或将视图直接放置到情节提要来解决这个问题。 您可能只需在情节提要中添加将广告保留在屏幕中的视图,然后将隐藏属性设置为“是”。然后您可以在一段时间后将其更改为 YES。

【讨论】:

以上是关于在横向模式下添加 UIView的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 横向模式返回不正确的视图大小

如何以横向模式正确打开我的应用程序

UIPagviewController 子视图在横向模式下消失

uiwindow横向模式问题

将 UIView 添加到横向窗口

以编程方式为 uiview 设置约束以支持纵向/横向