Ios 以编程方式使用自适应布局调整hCompact的静态单元格高度
在一个纯portait文字游戏中,我使用静态单元格显示IAP存储: 你可以在上面的iPhone4屏幕截图中看到我的问题——底部的粉红色按钮(用来观看视频广告和接收150枚硬币)不可见 这是我的Xcode截图(请点击查看): 我使用7个静态单元格:Ios 以编程方式使用自适应布局调整hCompact的静态单元格高度,ios,iphone,size-classes,adaptive-layout,Ios,Iphone,Size Classes,Adaptive Layout,在一个纯portait文字游戏中,我使用静态单元格显示IAP存储: 你可以在上面的iPhone4屏幕截图中看到我的问题——底部的粉红色按钮(用来观看视频广告和接收150枚硬币)不可见 这是我的Xcode截图(请点击查看): 我使用7个静态单元格: 蓝色顶部单元格,带后退按钮、标题、钱袋图标 状态文本(在上面的屏幕截图中不可见) 硬币套装1 硬币套装2 硬币套装3 硬币包4 视频广告(底部的粉红色电池-在iPhone4和其他紧凑型设备上不可见) 并使用此方法调整单元格的大小: - (CGF
- 蓝色顶部单元格,带后退按钮、标题、钱袋图标
- 状态文本(在上面的屏幕截图中不可见)
- 硬币套装1
- 硬币套装2
- 硬币套装3
- 硬币包4
- 视频广告(底部的粉红色电池-在iPhone4和其他紧凑型设备上不可见)
- (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?
}
我的问题是:对于高度紧凑的设备(中的hCompactsize类),如何以编程方式调整单元格高度
更新:
我自己的丑陋解决方案已经过时了:
@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;
}
作为这种情况下的一种解决方法,在单元格数量很少的情况下,带有子视图容器的scrollview将非常适合您的需要。我知道的代码多一点,但这并不比手动计算每个单元格的高度差。等待更好的解决方案。我将编写一个助手,查看当前trait集合的垂直大小类
- (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];
}
每个UIViewController都有一个可在代码中使用的traitCollection属性 在您的情况下,您可以这样检查:
if self.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact {
return 70;
}
else {
return 90
}
如果单元格是已知的,你能不能让它变快变脏,让表格视图的高度减去之前单元格高度的总和,然后返回最后一个单元格的高度?然后(正如你在iPhone4屏幕截图上看到的那样),最后一个单元格只剩下很少的像素了。我更喜欢在hCompact设备上对所有单元格使用较小的高度。哦,好吧,我明白了,我担心可能使用ios8,您可能会找到一个(脏的)解决方案,但对于较旧的操作系统,您必须“手动”进行计算。我真的很感兴趣。不,我的意思是根本不使用表视图。哦,好的,我明白了。固定底部的最后一个“单元格”,中间有一个滚动视图,或者任何想要的组合。您甚至可能只需要一个包含5个子视图(旧单元格)的静态视图是的,或者您想要的任何组合,实际上您甚至可能只需要一个包含5个子视图容器单元格的视图,并轻松应用“病态”布局谢谢。出于某种原因,我得到了iPhone4S、iPhone6、iPad2、iPadRetina的
UIUserInterfaceSizeClassRegular
(全模拟人像模式)-这使得我的应用程序无法使用这种方法。。。