2016-09-25 1 views
0

Ich habe eine ältere App, die für das iPhone 4 oder 4s gebaut wurde. Ich möchte es ein wenig ändern und es als eine App veröffentlichen, die für alle Geräte einschließlich iPad passt. Ich habe den Code bereits so optimiert, dass er jetzt auf allen Geräten funktioniert, aber wenn ich ihn auf iPhones neueren laufe, wird die 4s die App oben und unten schneiden. Das Problem ist, dass die Benutzeroberfläche der App in Code geschrieben ist und StoryBoard überhaupt nicht verwendet. Der Code für die Benutzeroberfläche:Wie passe ich eine iPhone 4 App an alle iOS Größen an?

- (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]; 

}

Hoffe, dass Sie mir dabei helfen kann, Vielen Dank im Voraus!

Antwort

1

die App in der oben geschnitten und unten

Sie die richtige Größe Startbildschirme für alle Gerätegrößen verwenden. Der einfachste Weg ist heutzutage das LaunchScreen-Storyboard. Erstellen Sie ein neues Projekt und Sie werden sehen, wie es konfiguriert ist.

+0

Hallo, danke für die Antwort. Ich habe meinem Projekt eine LaunchScreen.storyboard-Datei hinzugefügt, die ich einfach aus einem neuen leeren Projekt kopiert habe. Der Bildschirm ist immer noch geschnitten. Was kann ich jetzt machen? Muss ich etwas ändern, damit es funktioniert? –

+0

Ich sagte, sehen Sie, wie es konfiguriert ist. Wenn Sie nicht sehen, wie, kopieren Sie besser Ihren Code in ein neues Projekt. Das neue Projekt wird das Startscreen-Storyboard automatisch verwenden. – matt

+0

Das Problem ist, dass das Projekt eine Menge von Cocoapods Frameworks verwendet .. Ich habe versucht, es in ein neues Projekt zu kopieren, aber es funktioniert einfach nicht. Ich kopierte das LaunchScreen.storyboard von einem neuen Projekt, und ich versuchte zu sehen, ob es etwas anderes zwischen dieser Akte und einer anderen frischen Akte gibt und keine Unterschiede sah. Was kann ich tun? –

Verwandte Themen