繁体   English   中英

如何使iPhone 4应用适合所有iOS尺寸?

[英]How to fit an iPhone 4 app to all iOS sizes?

我有一个为iPhone 4或4s构建的较旧的应用程序。 我想稍作更改,然后将其发布为适用于所有设备(包括iPad)的应用程序。 我已经对代码进行了调整,因此现在它可以在所有设备上使用,但是当我在更新的iPhone上运行它时,该应用程序的顶部和底部都被剪切掉了。 问题在于应用程序的UI是用代码编写的,根本不使用StoryBoard。 UI的代码:

- (void)viewDidLoad {
[super viewDidLoad];

self.screenHeight = [UIScreen mainScreen].bounds.size.height;

UIImage *background = [UIImage imageNamed:@"bg"];

self.backgroundImageView = [[UIImageView alloc] initWithImage:background];
self.backgroundImageView.contentMode = UIViewContentModeScaleAspectFill;
[self.view addSubview:self.backgroundImageView];

self.blurredImageView = [[UIImageView alloc] init];
self.blurredImageView.contentMode = UIViewContentModeScaleAspectFill;
self.blurredImageView.alpha = 0;
[self.blurredImageView setImageToBlur:background blurRadius:10 completionBlock:nil];
[self.view addSubview:self.blurredImageView];

self.tableView = [[UITableView alloc] init];
self.tableView.backgroundColor = [UIColor clearColor];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.separatorColor = [UIColor colorWithWhite:1 alpha:0.2];
self.tableView.pagingEnabled = YES;
[self.view addSubview:self.tableView];

CGRect headerFrame = [UIScreen mainScreen].bounds;
CGFloat inset = 20;
CGFloat temperatureHeight = 110;
CGFloat hiloHeight = 40;
CGFloat iconHeight = 30;
CGRect hiloFrame = CGRectMake(inset, headerFrame.size.height - hiloHeight, headerFrame.size.width - 2*inset, hiloHeight);
CGRect temperatureFrame = CGRectMake(inset, headerFrame.size.height - temperatureHeight - hiloHeight, headerFrame.size.width - 2*inset, temperatureHeight);
CGRect iconFrame = CGRectMake(inset, temperatureFrame.origin.y - iconHeight, iconHeight, iconHeight);
CGRect conditionsFrame = iconFrame;
// make the conditions text a little smaller than the view
// and to the right of our icon
conditionsFrame.size.width = self.view.bounds.size.width - 2*inset - iconHeight - 10;
conditionsFrame.origin.x = iconFrame.origin.x + iconHeight + 10;

UIView *header = [[UIView alloc] initWithFrame:headerFrame];
header.backgroundColor = [UIColor clearColor];
self.tableView.tableHeaderView = header;

// bottom left
UILabel *temperatureLabel = [[UILabel alloc] initWithFrame:temperatureFrame];
temperatureLabel.backgroundColor = [UIColor clearColor];
temperatureLabel.textColor = [UIColor whiteColor];
temperatureLabel.text = @"0°";
temperatureLabel.font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:120];
[header addSubview:temperatureLabel];

// bottom left
UILabel *hiloLabel = [[UILabel alloc] initWithFrame:hiloFrame];
hiloLabel.backgroundColor = [UIColor clearColor];
hiloLabel.textColor = [UIColor whiteColor];
hiloLabel.text = @"0° / 0°";
hiloLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:28];
[header addSubview:hiloLabel];

// top
UILabel *cityLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, 30)];
cityLabel.backgroundColor = [UIColor clearColor];
cityLabel.textColor = [UIColor whiteColor];
cityLabel.text = @"Loading...";
cityLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:18];
cityLabel.textAlignment = NSTextAlignmentCenter;
[header addSubview:cityLabel];

UILabel *conditionsLabel = [[UILabel alloc] initWithFrame:conditionsFrame];
conditionsLabel.backgroundColor = [UIColor clearColor];
conditionsLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:18];
conditionsLabel.textColor = [UIColor whiteColor];
[header addSubview:conditionsLabel];

// bottom left
UIImageView *iconView = [[UIImageView alloc] initWithFrame:iconFrame];
iconView.contentMode = UIViewContentModeScaleAspectFit;
iconView.backgroundColor = [UIColor clearColor];
[header addSubview:iconView];

[[RACObserve([WXManager sharedManager], currentCondition)
  deliverOn:RACScheduler.mainThreadScheduler]
 subscribeNext:^(WXCondition *newCondition) {
     temperatureLabel.text = [NSString stringWithFormat:@"%.0f°",newCondition.temperature.floatValue];
     conditionsLabel.text = [newCondition.condition capitalizedString];
     cityLabel.text = [newCondition.locationName capitalizedString];

     iconView.image = [UIImage imageNamed:[newCondition imageName]];
 }];

RAC(hiloLabel, text) = [[RACSignal combineLatest:@[
                                                   RACObserve([WXManager sharedManager], currentCondition.tempHigh),
                                                   RACObserve([WXManager sharedManager], currentCondition.tempLow)]
                                          reduce:^(NSNumber *hi, NSNumber *low) {
                                              return [NSString  stringWithFormat:@"%.0f° / %.0f°",hi.floatValue,low.floatValue];
                                          }]
                        deliverOn:RACScheduler.mainThreadScheduler];

[[RACObserve([WXManager sharedManager], hourlyForecast)
  deliverOn:RACScheduler.mainThreadScheduler]
 subscribeNext:^(NSArray *newForecast) {
     [self.tableView reloadData];
 }];

[[RACObserve([WXManager sharedManager], dailyForecast)
  deliverOn:RACScheduler.mainThreadScheduler]
 subscribeNext:^(NSArray *newForecast) {
     [self.tableView reloadData];
 }];

[[WXManager sharedManager] findCurrentLocation];

}

希望您能帮到我,谢谢!

该应用程序在顶部和底部被剪切

您必须为所有设备尺寸使用适当大小的启动屏幕。 如今,最简单的方法是LaunchScreen故事板。 制作一个新项目,您将看到它的配置方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM