我附加sample project以允许您测试并查看我可以采取哪些措施来解决此问题。
我正在尝试动态调整高度的图像,同时围绕每个其他单元格的两个角。这样做会导致面具被切断。
基本上这就是我想要实现的目标:
UITableView的行高设置为自动。
_nTableView.rowHeight = UITableViewAutomaticDimension;
_nTableView.estimatedRowHeight = 150;
使用CustomTableViewCell
使用SDWebImage库下载图像[self.nImageView sd_setImageWithURL:[NSURL URLWithString:imageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL){}];
将单元格配置为根据其行
对角进行舍入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;
基于此stack overflow's question,我们需要删除掩码(如果有的话)。我试图在awakeFromNib方法中将掩码设置为nil,但这没有任何影响。
self.nImageView.layer.mask = nil;
self.nImageView.layer.masksToBounds = NO;
我也尝试按照此question的答案,但会导致应用崩溃。
提前谢谢。
答案 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;
}
}];
希望它有所帮助!!