创建Instagram的类似照片饲料

问题描述:

我试图做一个程序,我正在做,类似于Instagram的的照片饲料:创建Instagram的类似照片饲料

Instagram photo feed

我使用一个UITableView创造了一个初稿对于饲料来说,但它正在成为处理每个细胞动态性质的麻烦。喜欢和评论以及评论文本本身的数量将决定单元格的高度。我使用UITextViews绘制注释和文本,并使用UITextViews的sizeWithFont文本近似单元格高度和位置。这个解决方案似乎非常不精确,并且有很多缺点。

我想使用一个UIWebView为整个进料作为备用溶液。这将使定位像和评论文本非常简单,以及在Instagram中看到文本中具有可变字体的能力。我还没有真正使用过UIWebViews,所以我不确定通过这种方式创建整个Feed有多么简单或难。

我应该继续用我的UITableView溶液或看看它全部采用一个UIWebView重做?

+0

你能解释为什么你认为这是不准确的?这会帮助我理解你的问题。谢谢。 – Ryan 2012-01-17 17:22:07

+0

这只是觉得奇怪的大约多少空间文本将占用,而不是使用实际大小。例如,在文本视图最初没有显示在确切的正确位置之前,我遇到了问题,但是在下载图像后重新载入表格时弹出到位。我已经解决了这个问题。 – sbezboro 2012-01-18 20:27:37

在我的应用程序,我有一个UITableViewCell是动态调整基于文本的单元格中的量的高度。我认为这可能有助于回答你的问题。

这里的窍门:有没有必要“近似的文字大小” ---检查出documentation的方法[NSString sizeWithFont: constrainedToSize: lineBreakMode:]

maximumSize = CGSizeMake(self.contentView.bounds.size.width - TEXT_LEFT_MARGIN * 2.0, 
           MAXIMUM_TEXT_HEIGHT); 
     textStringSize = [textLabel.text sizeWithFont:textLabel.font 
            constrainedToSize:maximumSize 
             lineBreakMode:textLabel.lineBreakMode]; 

因此,让我们要将上面的空白为10个像素一个简单的例子标签以及标签下面的15个空白字符。那么你生成与上述测量值的CGRect,随着加入到上述生成的textStringSize.height值的25个像素的高度。

使用这种方法意味着你的UITableViewCells将放大和缩小很好,无论在不同的标签注释的大小。

+0

是的,这是我最终做的。我只是认为会有一个更好的解决方案,因为我的代码不是最好看的,因为所有的框架调整大小和定位在每个单元格中进行。 – sbezboro 2012-02-14 13:57:23

+0

您的代码可以得到很多更好的管理,如果你避免硬编码的数字,而是使用'#define'设置你想周围的文本中使用的像素数。例如,我使用'#define kDefaultFontPadding 10;'来说明标签周围应该有10个像素的填充。希望能够帮助清理代码---这意味着您可以从多个地方引用该单一号码,然后通过在一个地方更改号码来轻松尝试不同的值。 – bryanjclark 2012-02-14 17:53:29

+1

constrainedToSize在iOS7中折旧使用/建议弃用api的逻辑是什么? @sbezboro你可以使用boundingRectWithSize:options:attributes:context:来代替。 – iLearner 2014-04-30 06:26:35

试试这个..

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *[email protected]"item"; 
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:simpleIdendifer]; 
    if(cell==nil) 
    { 
     cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdendifer]; 

    } 


    [[cell textLabel] setText:self.str]; 
    [[cell textLabel] setNumberOfLines:0]; 
    [[cell textLabel] setLineBreakMode:NSLineBreakByWordWrapping]; 
    [[cell textLabel] setFont:[UIFont preferredFontForTextStyle:UIFontTextStyleBody]]; 
     return cell; 
} 


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //add your table view cell content here 
    NSString *string = self.str; 

    NSDictionary *attributes = @{NSFontAttributeName: [UIFont preferredFontForTextStyle:UIFontTextStyleBody]}; 

    CGRect frame = [string boundingRectWithSize:CGSizeMake(CGRectGetWidth(tableView.bounds), CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) attributes:attributes context:nil]; 
    return ceilf(CGRectGetHeight(frame)+TableViewCellPadding); 
}