无法显示子视图全屏尺寸和横向

Posted

技术标签:

【中文标题】无法显示子视图全屏尺寸和横向【英文标题】:Can't display a subview fullscreen size and landscape 【发布时间】:2013-03-19 18:46:21 【问题描述】:

我正在向视图控制器添加一个子视图,其尺寸为 1024(W) x 768(H)。我的应用设置为仅支持 plist 中的横向,但我的子视图将始终以纵向显示,其底部从屏幕上消失。

我的超级观点:

#import "TSTViewController.h"
#import "TSTContentViewController.h"

@interface TSTViewController ()
@property (nonatomic, strong) TSTContentViewController *tcvc;
@end

@implementation TSTViewController

- (void)loadView

    UIView *rootView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 1024.0f, 768.0f)];
    [rootView setBackgroundColor:[UIColor yellowColor]];
    self.view = rootView;
    _tcvc = [[TSTContentViewController alloc] initWithNibName:@"TSTContentViewController" bundle:nil];
    [rootView addSubview:_tcvc.view];


- (void)viewDidAppear:(BOOL)animated

    NSLog(@"H:%f W:%f; H:%f W:%f", self.view.frame.size.height, self.view.frame.size.width, _tcvc.view.frame.size.height, _tcvc.view.frame.size.width);


@end

我的应用委托:

#import "TSTAppDelegate.h"

#import "TSTViewController.h"

@implementation TSTAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[TSTViewController alloc] init];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;


@end

我的子视图 (TSTContentViewController) 没有自定义代码,并且笔尖尺寸为 (1024W X 768H),背景为灰色。

看似无条件,结果如下:

(黄色超视图,灰色子视图)

viewDidAppear 中的 NSLog 打印出两个视图都有纵向尺寸,即使是黄色的,实际上看起来就像是横向的。

有什么想法吗?

编辑以获取更多详细信息:

如果子视图的宽度仅小 1 个像素,则视图会像它应该的那样变成横向(见下面的黄色细条)。

根据我的观察,只有完全全屏会导致此子视图旋转。越来越小的框架保留了笔尖中定义的尺寸。

【问题讨论】:

你在使用自动布局吗? TSTViewController(超级视图)没有笔尖。 TSTContentViewController(子视图,灰色)在有或没有自动布局的情况下显示相同。 添加了一个细节。如果子视图的高度小于 768,它会按预期变为横向。 请检查我发布的答案。 【参考方案1】:

如果你使用自动布局,那么你只需要为你的子视图添加几个约束:

- (void)loadView

    UIView *rootView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 1024.0f, 768.0f)];
    [rootView setBackgroundColor:[UIColor yellowColor]];
    self.view = rootView;
    TSTContentViewController* _tcvc = [[TSTContentViewController alloc] initWithNibName:@"TSTContentViewController" bundle:nil];
    [self.view addSubview:_tcvc.view];
    [_tcvc.view setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[view]|" options:0 metrics:nil views:@@"view":_tcvc.view]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@@"view":_tcvc.view]];

【讨论】:

好的。如果我不使用自动布局,知道该怎么做吗? 您需要覆盖 - (void)viewWilLayoutSubviews 并手动布局您的子视图。 嗯好吧,我会试一试。尽管如此,这种情况只会发生在完全全屏尺寸的尺寸上。可能是 API 中的错误?

以上是关于无法显示子视图全屏尺寸和横向的主要内容,如果未能解决你的问题,请参考以下文章

HTML 编写页面在手机中无法全屏显示

如何在objective-c iPhone的视图中显示特定尺寸(非全屏)的视图?

全屏视频后iOS状态栏保持横向

iframe调用无法全屏显示

Xcode 4.5 新模拟器无法正确显示

如何全屏显示 SwiftUI 子视图?