在tableview中显示纵向和横向图像

时间:2015-07-23 05:58:16

标签: ios objective-c uitableview

我已经在这里待了大约一个星期了,而且我要把头发撕掉了。

我将UITableView建模为消息传递应用程序:带文本的单元格,带图像的单元格。经过一些非常广泛的测试后,我发现使用estimatedHeightForRowAtIndex路径是一件非常糟糕的事情,因为我有兴趣在视图加载时将我的表格滚动到底部,并且estimatedHeight对我的表格末尾的位置感到困惑是。因此,我手动计算所有高度并存储在我存储和从磁盘读取的缓存中。 (思考?)

那就是说,我试图显示本地图像。肖像图像看起来很好。风景图像没有。风景图像根据控制台打破自动布局。

请看看我的情况并告诉我,我做错了什么。

                    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                    NSLog(@"Retrieving local image from documents folder: %@", message);

                    NSFileManager *fileManager = [NSFileManager defaultManager];
                    NSString *filePath = /* I'm getting proper file path here */

                    if([fileManager fileExistsAtPath:filePath]) {
                        UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfFile:filePath]];

                        dispatch_async(dispatch_get_main_queue(), ^{
                            MessagesTableViewCell *cell = (id)[self.tableView cellForRowAtIndexPath:indexPath];

                            if (cell) {
                                cell.photoView.image = image;
                                cell.photoView.layer.cornerRadius = 10;

                                CGFloat aspectRatio = image.size.width / image.size.height;
                                CGFloat screenRatioHeightMultiplier = 0.6f;
                                CGFloat screenRatioWidthMultiplier = 0.7f;

                                CGFloat maxHeight = (image.size.height / image.size.width) * self.tableView.bounds.size.width;
                                maxHeight = MIN(maxHeight, self.scrollView.bounds.size.height * screenRatioHeightMultiplier);

                                NSLayoutConstraint *aspectRatioConstraint = [NSLayoutConstraint constraintWithItem:cell.photoView
                                                                                                         attribute:NSLayoutAttributeWidth
                                                                                                         relatedBy:NSLayoutRelationEqual
                                                                                                            toItem:cell.photoView
                                                                                                         attribute:NSLayoutAttributeHeight
                                                                                                        multiplier:aspectRatio
                                                                                                          constant:0];

                                [cell.photoView addConstraint:aspectRatioConstraint];

                            }
                        });
                    }
                });

正如你所看到的,我尝试做的是通过计算宽高比和应用自定义约束来计算图像的宽高比(因为我无法做到这一点)在故事板中,由于图像的动态性质。)

我使用此代码来计算多行标签的动态高度。有人可以为图像推荐类似的机制吗?

    static CustomTableViewCell *cell;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        cell = (CustomTableViewCell*)[self.tableView dequeueReusableCellWithIdentifier: identifier];
    });

cell.textLabel.text = message;
            cell.textLabel.preferredMaxLayoutWidth = self.tableView.frame.size.width;

CGFloat calculatedCellHeight = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

帮助。

2 个答案:

答案 0 :(得分:0)

根据您的要求使用UIView的contentMode属性

答案 1 :(得分:0)

一如既往,我的iOS帖子中有蟋蟀。我找到了一个解决方案,但不值得发布。