Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以编程方式使用自适应布局调整hCompact的静态单元格高度_Ios_Iphone_Size Classes_Adaptive Layout - Fatal编程技术网

Ios 以编程方式使用自适应布局调整hCompact的静态单元格高度

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

在一个纯portait文字游戏中,我使用静态单元格显示IAP存储:

你可以在上面的iPhone4屏幕截图中看到我的问题——底部的粉红色按钮(用来观看视频广告和接收150枚硬币)不可见

这是我的Xcode截图(请点击查看):

我使用7个静态单元格:

  • 蓝色顶部单元格,带后退按钮、标题、钱袋图标
  • 状态文本(在上面的屏幕截图中不可见)
  • 硬币套装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
(全模拟人像模式)-这使得我的应用程序无法使用这种方法。。。