In a portait-only word game I use static cells to display an IAP store:
You can see my problem in the iPhone 4 screenshot above - the pink button (to watch video ads and receive 150 coins) at the bottom is not visible.
Here is my Xcode screenshot (please click for fullscreen):
I use 7 static cells:
And resize the cells with this method:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([indexPath row] == 0)
return 70;
if ([indexPath row] == 1)
return 35;
return 90; // XXX how to change this to 70 for hCompact?
}
My question is: how to resize the cells height programmatically for devices with compact height (the hCompact size class in Adaptive Layout).
UPDATE:
My own ugly solution has been sofar:
@interface StoreCoinsViewController ()
{
int _cellHeight;
}
- (int)setCellHeight // called in viewDidLoad
{
int screenHeight = UIScreen.mainScreen.bounds.size.height;
NSLog(@"screenHeight=%d", screenHeight);
if (screenHeight >= 1024) // iPad
return 160;
if (screenHeight >= 736) // iPhone 6 Plus
return 110;
if (screenHeight >= 667) // iPhone 6
return 100;
if (screenHeight >= 568) // iPhone 5
return 90;
return 72; // iPhone 4s (height=480) and earlier
}
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([indexPath row] == 0)
return 70;
if ([indexPath row] == 1)
return 35;
return _cellHeight;
}
I would write a helper that looks at the vertical size Class for the current trait collection
- (CGFloat)verticalSizeForCurrentTraitCollection {
switch (self.traitCollection.verticalSizeClass) {
case UIUserInterfaceSizeClassCompact:
return 70;
case UIUserInterfaceSizeClassRegular:
return 90;
case UIUserInterfaceSizeClassUnspecified:
return 80;
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([indexPath row] == 0)
return 70;
if ([indexPath row] == 1)
return 35;
return [self verticalSizeForCurrentTraitCollection];
}