动态单元格内容和高度以及AutoLayout

时间:2014-07-26 08:28:24

标签: ios uitableview dynamic autolayout

我目前正在开发社交媒体应用程序(基本类似于Facebook),而且我最难使用自动布局。我曾经使用框架和东西来做,但由于我的整个项目使用自动布局,我想尝试使其工作。

基本上,我有一个顶部有一些信息的单元格,下面是UILabel(包含用户的状态),下面是一个视图(可以包含从UIImage到Web视图的任何内容)。它充当容器)和底部带有操作按钮的栏(如/ share和stuff)。

我对任何内容使用相同的单元格(仅文字,图片,视频和网页)。我会做的是当用户只共享状态时,我删除容器视图(或隐藏它),在其他情况下,我开始:

  1. 计算状态'标签高度从状态'使用boundingRectWithSize的文本
  2. 取决于饲料类型(文字,图像等),我计算整个细胞高度
  3. 细胞高度很好。我对状态文字标签有困难。

    首先,我尝试使用setFrame在cellForRowAtIndexPath中设置标签的高度。它不起作用。

    之后,我尝试直接在单元格中计算标签的高度。我在单元格的layoutSubviews中调用了这个方法

    - (void)resizeStatusTextField
    {
        NSString* text = self.feedTextLabel.text;
        CGRect rect = [text boundingRectWithSize:CGSizeMake(300, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: self.feedTextLabel.font} context:nil];
        NSDictionary* views = NSDictionaryOfVariableBindings(_containerView, _feedTextLabel);
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:[_containerView]-46-[_feedTextLabel(%f)]", rect.size.height] options:0 metrics:nil views:views]];
        [self setNeedsUpdateConstraints];
    }
    

    所以我尝试做的是将feedTextLabel约束设置为低于它的容器顶部的46个点并设置计算的大小。

    它似乎或多或少地起作用(我不确定这是否是正确的方法)但是现在每当我滚动时,文本内容就会消失。

    如果有人可以向我指出在tableView中管理这种动态约束的正确方法,我们将非常感激。

    感谢。

    编辑:我当然读过像" Using Auto Layout in UITableView for dynamic cell layouts & variable row heights"这样的帖子,但我相信我的情况非常奇怪,因为我有多个视图可以在单元格内部具有动态高度。所以请不要将此帖标记为重复;)谢谢

0 个答案:

没有答案