【发布时间】:2017-01-13 13:01:52
【问题描述】:
我正在将旧 iOS 应用程序中的一些代码+xib 布局合并到当前应用程序中。
除了 iPhone 5/6 上的布局外,所有功能都可以正常工作。原始应用程序确实会扩展以适应这些屏幕。但是,我只使用旧应用程序中的一部分视图控制器,从当前应用程序中的新按钮启动。
我看到的是 iPhone 4 尺寸布局占据了屏幕的左上角,例如iPhone 6,加载旧代码中的视图控制器时。
我尝试了很多不同的方法。略有不同的一件事是查看旧应用的 SplashScreen 的代码:
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
//Init the View
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
UIView *view = [[UIView alloc] initWithFrame:appFrame];
view.autoresizingMask = UIViewAutoresizingFlexibleHeight |UIViewAutoresizingFlexibleWidth;
self.view = view;
[view release];
NSString *splashImageName = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
splashImageName = @"iPadDefault2.png";
else
splashImageName = @"Default.png";
mSplashImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:splashImageName]];
[self.view addSubview:mSplashImageView];
}
所以我在HomeScreenViewController 中添加了以下内容,这是从新应用程序启动的视图:
- (void)loadView
{
[[[NSBundle mainBundle] loadNibNamed:@"HomeScreenViewController" owner:self options:nil] objectAtIndex:0];
self.view.autoresizesSubviews = YES;
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIImage* backgroundImage = [UIImage imageNamed:@"Default-no-logo.png"];
self.view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
[self.view setFrame:appFrame];
}
现在我将背景图像平铺以填充 iPhone 6 上的空间,但是界面仍然在左上角的相同位置和大小。
我查看了诸如 UIView added programmatically full screen wrong size 之类的答案,创建了一个自定义 UIView,但它似乎对我的情况没有帮助。
编辑:
如果我将loadView 方法更改为:
NSString *splashImageName = nil;
splashImageName = @"Default-no-logo.png";
mSplashImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:splashImageName]];
mSplashImageView.contentMode = UIViewContentModeScaleAspectFit;
[mSplashImageView setFrame:appFrame];
[self.view addSubview:mSplashImageView];
我让图像全屏显示。但是,使用自定义 UIView 执行此操作不起作用。如何让 UIView 尊重 autoresizingMask 并随着更大的显示而增长?
我在不同的地方设置了调试点,对于 iPhone 6,它总是说高度是 667。
【问题讨论】:
-
检查您从 xib 文件创建的 outlet
-
基本上是插座问题,请删除并创建插座的新实例
标签: ios objective-c iphone xib