2016-03-29 6 views
-1

私の現在の問題は、さまざまなiOS画面サイズに対して有限数のセル[3]サイズを変更しようとしていることです。私は現在、任意のxサイズのクラスで600x300のプロトタイプセルを持っていて、それはiPhone 6には完璧です。しかし、他の画面サイズにしようとすると、セルが大きすぎます。 iPhone 6]または十分に大きくない[iPhone 6+、iPad etc.]異なるスクリーンサイズに合わせてUITableViewCellをサイズ変更する

セルにはすべてUIImageViewがあり、幅は正しく、高さは変更されません。

私は単純にテーブルセルにモックアップの写真を入れて、私が目指していることのアイデアを得ます。ここで

tableView.scrollEnabled = false 
+0

Interface BuilderでUIImageViewモードを試してみてください。今度は、_ScaleをFill_に設定しているように見えます。そのため画像が伸びていて、_Aspectを設定しようとしていますFit_ – schmidt9

+0

ありがとうございます。伸ばされている。画像はサイズを保持していますが、セルはハードウェアに関係なく300の高さを維持しています。私は3つのセルがどこのデバイスに応じて画面サイズに完全に収まるかを確認したいが、これについてどうやって行くのか分からなかった。 @ schmidt9 –

答えて

1

@ schmidt9さんと@VinodVishwanathさんの投稿の助けを借りて、このことがわかりました。コンテンツを表示する画面のサイズを適切に計算するには、ナビゲーションバーのスペースをステータスバー(時間、バッテリーなど)から引く必要があります。)次の行が、これを実行することができます。

UIScreen.mainScreen().fixedCoordinateSpace.bounds.height 

self.navigationController!.navigationBar.frame.size.height 

は、ナビゲーションバーとステータスメニューを含む全画面のサイズを見つけるには:

は、ナビゲーションバーのサイズを確認するには

ステータスバーはすべてのデバイスで一貫して20であるため、単純に引き算できます。あなたが最終的にこのコードが残されています。

let screenHeight = UIScreen.mainScreen().fixedCoordinateSpace.bounds.height - self.navigationController!.navigationBar.frame.size.height - 20 
    self.tableView.rowHeight = screenHeight/3 

は、数式のより多くにそれを置くために: 総スクリーン - ナビゲーションバー - これは、役立ちます20 =トータルワークスペース

・ホープ(ステータスバーから)してくださいそれ以上の命令のコメント。

1

は、コードスニペットです:私はあなたがTableViewControllerに次の行を実装すると考えている場所をスクロールする必要はありませんどこにそれをしたいと思います。画像サイジングについては、UIImageViewモードに関する基本的に2つのオプションがあります。以下のスクリーンショットをご覧ください。 ImageTableViewCellのxibでは、UIImageViewの場合、Clip Subviewsアスペクトの塗りつぶしオプションを選択し、アウトレットをImageTableViewCellに設定する必要があります)をチェックする必要があります。 ImageTableViewCellには、このアウトレット以外は何も含まれていません。xibには、スーパービューに対してイメージビューの先頭と末尾のスペースの制約が0に設定されています(ストレッチします)。

のViewController

#import "SecondViewController.h" 
#import "ImageTableViewCell.h" 

#define kCellIdentifier @"cell" 

@interface SecondViewController() 
{ 
    NSArray *_data; 
} 

@end 

@implementation SecondViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tableView.scrollEnabled = NO; 
    self.tableView.separatorColor = [UIColor clearColor]; 
    [self.tableView registerNib:[UINib nibWithNibName:@"ImageTableViewCell" bundle:nil] forCellReuseIdentifier:kCellIdentifier]; 
    _data = @[@"img.jpg", @"img.jpg", @"img.jpg"]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return _data.count; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return (self.tableView.bounds.size.height 
      - self.navigationController.navigationBar.frame.size.height 
      - [UIApplication sharedApplication].statusBarFrame.size.height)/3; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    ImageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier forIndexPath:indexPath]; 
    cell.myImageView.image = [UIImage imageNamed:_data[indexPath.row]]; 

    return cell; 
} 

@end 

アスペクト

fit

はアスペクト塗りつぶしフィット

fill

+0

これはすばらしい説明です。私が必要としていたことを正確に達成するために、少しずつやり遂げることができました。ありがとうございました –

1

主な必要なステップは、セルとセルの画像の縦横比(幅を高さで割ったもの)を決定することです。

それらが同じだと仮定すると(16のアスペクト比と仮定:9)、次の手順を実行します

  1. viewDidLoad後、アスペクト比に基づいて、その高さを計算することにより、行の高さを設定します。

     let screenWidth    = CGRectGetWidth(UIScreen.mainScreen().bounds) 
         let height     = screenWidth * 9/16 
         self.tableView.rowHeight = height 
    
  2. プロトタイプセルに、UIImageViewを追加します。最大幅(先頭と末尾の空白をcontentView = 0)にし、アスペクト比の制約を16:9に設定します(他の高さの制約はないはずです)。
関連する問題