适用于 iPad / iPhone 5、6、6+ 的 UITableView 调整大小

Posted

技术标签:

【中文标题】适用于 iPad / iPhone 5、6、6+ 的 UITableView 调整大小【英文标题】:UITableView resize for iPad / iPhone 5,6,6+ 【发布时间】:2014-12-28 23:03:45 【问题描述】:
-(void)viewDidLoad

    UINib *nib = [UINib nibWithNibName:@"CustomTableViewCell" bundle:nil];
    [[self tableView] registerNib:nib forCellReuseIdentifier:@"customCell"];


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


  static NSString *CellIdentifier = @"customCell";
  CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  // 

CustomTableViewCell 设置在具有以下布局的 NIB 中:

内容视图 UIView(占位符视图) UIImageView (customImageView)

我希望 ContentView/UIView/UIImageView 根据用于显示 UITableView 的设备的宽度调整大小。可以调整 UITableView 的大小(但我不得不在 layoutSubviews 的 UITableView 的子类中设置 UITableView 的框架,因为 UITableView 不断重置为更小的框架)

- (void)layoutSubviews

    [super layoutSubviews];

    CGRect screenRect = [[UIScreen mainScreen] bounds];
    self.frame = CGRectMake(0, 0, screenRect.size.width, screenRect.size.height);

在继承 layoutSubviews 之后,我已经在 Custom 类的 NIB 中设置了每个视图的大小:

- (void)layoutSubviews


    float cellHeight = ...;

    CGRect screenRect = [[UIScreen mainScreen] bounds];
    self.paddingView.frame = CGRectMake(0,0, screenRect.size.width, 10 );

    self.placeholderView.frame = CGRectMake(0, 0, screenRect.size.width, cellHeight);
    self.customImageView.frame = CGRectMake(0, 0, screenRect.size.width, cellHeight);    

但这似乎只适用于 UITableView 中的每第三行。

这似乎是一种复杂的设置宽度的方法 - 有没有更简单的方法可以做到这一点,是否有解释为什么这只适用于每三行?

谢谢,

【问题讨论】:

【参考方案1】:

使用 Autolayout 会更明智,只需在 Interface Builder 中设置约束即可。使用超级视图从各个方面为 tableview 提供约束。同样给自定义单元格提供约束。单元格和表格视图将根据设备宽度本身调整大小。

给tableview的约束如下:Leading to Superview,Trailing to Superview,Top to Superview,Bottom to Superview

同样对tableView Cell中的imageView进行约束:Leading to Superview,Trailing to Superview,Top to Superview,Bottom to Superview

【讨论】:

你能说得更具体点吗?我应该添加哪些约束?

以上是关于适用于 iPad / iPhone 5、6、6+ 的 UITableView 调整大小的主要内容,如果未能解决你的问题,请参考以下文章

css iPhone 6 Plus和iPad Air 2媒体查询(Retina HD显示屏)。也适用于类似的Android设备。

css iPhone 6 Plus和iPad Air 2媒体查询(Retina HD显示屏)。也适用于类似的Android设备。

如何限制我的应用仅适用于 iPhone 6 和 6 Plus?

钥匙串类不适用于 iPhone 4s/5 和 iPad

仅适用于 iPhone 5/5s 和 iPhone 6/6+ 将应用程序提交到 App Store [重复]

如何在资产目录新图像集中删除所有 iPhone/iPad 视网膜/非视网膜图像