调整UITableViewCell的大小以适合标签或图像和圆角

时间:2017-03-15 18:02:27

标签: ios objective-c swift uitableview

我附加sample project以允许您测试并查看我可以采取哪些措施来解决此问题。

我正在尝试动态调整高度的图像,同时围绕每个其他单元格的两个角。这样做会导致面具被切断。

基本上这就是我想要实现的目标:

  1. UITableView的行高设置为自动。

    _nTableView.rowHeight = UITableViewAutomaticDimension;
    _nTableView.estimatedRowHeight = 150;
    
  2. 使用CustomTableViewCell

    使用SDWebImage库下载图像
    [self.nImageView sd_setImageWithURL:[NSURL URLWithString:imageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL){}];
    
  3. 将单元格配置为根据其行

    对角进行舍入
    UIBezierPath *maskPath = [UIBezierPath
                          bezierPathWithRoundedRect:self.bubbleView.bounds
                          byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerTopLeft)
                          cornerRadii:CGSizeMake(20, 20)];
    
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    
    maskLayer.frame = self.bubbleView.bounds;
    maskLayer.path = maskPath.CGPath;
    
    self.bubbleView.layer.mask = maskLayer;
    
  4. 执行上述操作时,遮罩 切断 ,但正确计算高度。见下文: enter image description here

    基于此stack overflow's question,我们需要删除掩码(如果有的话)。我试图在awakeFromNib方法中将掩码设置为nil,但这没有任何影响。

    self.nImageView.layer.mask = nil;
    self.nImageView.layer.masksToBounds = NO;
    

    我也尝试按照此question的答案,但会导致应用崩溃。

    提前谢谢。

2 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案 - 可能不是最好的,可能不会完全符合您的需要,但可能会让您继续前进......

不要尝试从自定义UITableViewCell类中操作图层/蒙版,而是使用UIView子类作为图像持有者。该类的代码可以处理圆角和图层/蒙版大小更新。

请参阅此处的示例:https://github.com/DonMag/dhImage

答案 1 :(得分:-1)

根据内容的高度设置行的高度:

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

    if(/*check if content is text label*/)
    {
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell1"];
      UILabel *lbl = (UILabel*)[ cell.contentView viewWithTag:1000];  
      lbl.text = message;
      [cell layoutIfNeeded];
      CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

      if(size.height < 100) {
            return  100;
      }
      else {
           return size.height;
      }
    }
    else {                 // content is image 
        return 200;
      }
    }

将单元格配置为圆角:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  .
  .
  .
    [cell.contentView.layer setCornerRadius:10.0f];
  return cell;
}

使用SDWebImage库下载图像:

      SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
       [downloader downloadImageWithURL:addr 
                                options:0 
                               progress:
                  ^(NSInteger receivedSize, NSInteger expectedSize) {
                        // progression tracking code 
                              }
                              completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                      if (image && finished) {
                          // Pass the imageView to this block
                          // After completion display downloaded image in imageView
                          imageView.image = image;
                      }
                  }];

希望它有所帮助!!