使用 insertSubview 显示时 UIViewController 在屏幕上被按下
Posted
技术标签:
【中文标题】使用 insertSubview 显示时 UIViewController 在屏幕上被按下【英文标题】:UIViewController being pushed down on screen when displayed using insertSubview 【发布时间】:2013-05-22 17:51:53 【问题描述】:有点问题,下面是细分:
我的 AppDelegate 使用视图控制器作为它的 rootViewController。这个视图控制器的目的是交换几个其他的视图控制器,称之为登录和主屏幕。为了简单起见,我已经从我将发布的代码中删除了所有交换代码,并让 rootViewController 简单地显示它的第一个内容视图控制器,比如登录。
我遇到的问题是内容视图控制器似乎在 rootViewController 内被向下推了一点。我给 rootViewController 一个蓝色背景,给内容视图控制器一个橙色背景。这是我的代码:
AppDelegate.h
#import <UIKit/UIKit.h>
@class MainViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) MainViewController *main;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "MainViewController.h"
@implementation AppDelegate
@synthesize main;
- (void)dealloc
[_window release];
[main release];
[super dealloc];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
MainViewController *mainVC = [[MainViewController alloc] init];
self.main = mainVC;
self.window.rootViewController = self.main;
[self.window makeKeyAndVisible];
return YES;
MainViewController.h
#import <UIKit/UIKit.h>
@class ContentViewController;
@interface MainViewController : UIViewController
@property (nonatomic, retain) ContentViewController *content;
@end
MainViewController.m
#import "MainViewController.h"
#import "ContentViewController.h"
@implementation MainViewController
@synthesize content;
- (id)init
self = [super init];
if (self )
// Custom initialization
return self;
- (void)viewDidLoad
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor];
ContentViewController *viewController = [[ContentViewController alloc] init];
self.content = viewController;
[self.view insertSubview:self.content.view atIndex:0];
- (void)dealloc
[content release];
[super dealloc];
@end
ContentViewController.h
#import <UIKit/UIKit.h>
@interface LoginVC : UIViewController
@end
ContentViewController.m
#import "ContentViewController.h"
@implementation ContentViewController
- (id)init
self = [super init];
if (self)
// Custom initialization
return self;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor orangeColor];
- (void)dealloc
[super dealloc];
@end
上面的代码给了我一个状态栏,它下面有一个蓝色条(大约是状态栏的高度)(这是主视图控制器),然后是橙色的内容视图控制器,占据了屏幕的其余部分。出于某种原因,主视图控制器似乎将内容视图控制器向下推了一点。
奇怪的是,如果我创建一个视图控制器并使用 XIB 来绘制视图,它看起来还不错,并且内容视图正好位于主视图的顶部。
如果有人能对这个问题有所了解,我将不胜感激。
干杯
【问题讨论】:
【参考方案1】:我想你不应该这样做
ContentViewController *viewController = [[ContentViewController alloc] init];
self.content = viewController;
[self.view insertSubview:self.content.view atIndex:0];
而是:
ContentViewController *viewController = [[ContentViewController alloc] init];
self.content = viewController;
[self presentViewController:self.content animated:YES completion:nil];
【讨论】:
怕不行,现在根本看不到内容视图控制器(橙色)。我最终得到一个警告:“警告:尝试在以上是关于使用 insertSubview 显示时 UIViewController 在屏幕上被按下的主要内容,如果未能解决你的问题,请参考以下文章
Swift:UIView.insertSubview( , aboweSubview) 在 iOS 8 上不起作用
UIView类中addSubview和insertSubview之间的区别
self.view.insertSubview 背景图像数组不前进