如何根据屏幕大小设置UITableViewCell高度

时间:2015-01-23 21:53:54

标签: ios objective-c uitableview

我从网上下载数据,它由文字和图片组成。我将这些数据放入UITableView,我希望图像成为UITableViewCell的背景。 所有图像都具有相同的分辨率620x350。

所有iPhone都有不同的屏幕尺寸,因此我需要根据屏幕尺寸缩放图像的宽度和高度,并且还要对UITableViewCell执行此操作。

最佳解决方案是什么?

谢谢。

3 个答案:

答案 0 :(得分:3)

最佳且干净的解决方案,只是玩单元格的高度,让图像通过Autolayout 自动调整大小。

很容易:

  1. 在您的单元格中,添加UIImageView并设置单元格具有实际高度时您想要的尺寸;

  2. 设置为此UIImageView的约束,至少顶部,底部和一个横向边框(右侧或左侧);设置约束以保持比例宽度/高度;

  3. 此时,当细胞生长,图像高度增长,并保持比例(感谢约束)它也调整宽度,具有始终正确且比例合适的尺寸。

    现在,您只需编写单元格高度的代码:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        static CGFloat cellDefaultHeight = /*the default height of the cell*/;
        static CGFloat screenDefaultHeight = /*the default height of the screen i.e. 480 in iPhone 4*/;
    
        CGFloat factor = cellDefaultHeight/screenDefaultHeight
    
        return factor * [UIScreen mainScreen].bounds.size.height;
    }
    

    显然,将contentMode的{​​{1}}设置为UIImageView

答案 1 :(得分:2)

只需使用- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

即可
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
  CGFloat aspectRatio = 350.0f/620.0f;
   return aspectRatio * [UIScreen mainScreen].bounds.size.width;// assuming that the image will stretch across the width of the screen
}

答案 2 :(得分:-1)

您可以使用-tableView:heightForRowAtIndexPath:中的HTTableViewDelegate方法返回每个单元格的高度。在你的情况下,你会想要这样的东西:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    return [UIScreen mainScreen].bounds.size.height;
}