2012-01-17 114 views
3

我試圖做一個程序,我正在做,類似於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

回答

1

在我的應用程序,我有一個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

0

試試這個..

-(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); 
}