4

ポートレートのみの単語ゲームで、静的セルを使用して IAP ストアを表示します。

iPhoneのスクリーンショット

上の iPhone 4 のスクリーンショットで私の問題を確認できます。下部にあるピンク色のボタン (ビデオ広告を視聴して 150 コインを受け取るため) が表示されません。

これが私のXcodeのスクリーンショットです(全画面表示するにはクリックしてください):

Xcode のスクリーンショット

7 つの静的セルを使用します。

  • 戻るボタン、タイトル、お金の袋のアイコンが付いた青みがかった上部のセル
  • ステータス テキスト (上のスクリーンショットには表示されていません)
  • コインパック1
  • コインパック2
  • コインパック3
  • コインパック4
  • 動画広告 (下部のピンクのセル - iPhone 4 などのコンパクトなデバイスでは表示されないという問題があります)

そして、この方法でセルのサイズを変更します:

- (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?
}

私の質問は、コンパクトな高さのデバイス(Adaptive LayoutのhCompactサイズ クラス)のセルの高さをプログラムでサイズ変更する方法です。

アップデート:

私自身の醜い解決策は不十分でした:

@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;
}
4

3 に答える 3

1

現在の特性コレクションの垂直サイズ クラスを調べるヘルパーを作成します。

- (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];
}
于 2015-04-21T13:46:54.830 に答える
1

すべての UIViewController には、コードで使用できる traitCollection プロパティがあります。

あなたの場合、次のように確認できます。

if self.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact {
    return 70;
}
else {
    return 90
}
于 2015-04-21T13:56:48.310 に答える