2014-02-06 64 views
0

在我的UITableView中,所有單元格的高度不同。他們都有一個背景圖片,這是一張泡泡圖片。所有細胞的TextLabels需求是不同的寬度一樣,所以我子類UITableViewCell,並給予其兩個屬性:無法調整UIImageView的框架在具有動態高度的子類UITableViewCell中

@property (strong, nonatomic) UILabel* messageTextLabel; 
@property (strong, nonatomic) UIImageView* bubbleImageView; 

我有我的自定義UITableViewCell的initWithStyle設置像這樣:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
if (self) { 

    //stretchable bubble image 
    UIImage *rawBackground = [UIImage imageNamed:@"text_bubble"]; 
    UIImage *background = [rawBackground stretchableImageWithLeftCapWidth:13 topCapHeight:22]; 
    _bubbleImageView = [[UIImageView alloc] initWithImage:background]; 

    //textlabel 
    _messageTextLabel = [[UILabel alloc] init]; 
    [_messageTextLabel setFont:[UIFont systemFontOfSize:14.0f]]; 
    [_messageTextLabel setNumberOfLines:0]; 
    [_messageTextLabel setBackgroundColor:[UIColor clearColor]]; 
    [_messageTextLabel setTextColor:[UIColor blackColor]]; 

    [self.contentView addSubview:_bubbleImageView]; 
    [self.contentView addSubview:_messageTextLabel]; 

} 
    return self; 
} 

在我的TableView的cellForRowAtIndexPath,我已經嘗試過,只是ALLOC一個UIImageView存在,並且設置爲單元的框架,並且該作品,但是當我向上和向下滾動,然後在屏幕獲取與UIImageViews正在重新alloced了混亂並結束。我試過了if(cell == nil)技術,但是這隻會讓我的整個UITableView變成空白。所以,這就是我現在所擁有的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    Cell *cell = (Cell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    //works just fine 
    [cell.messageTextLabel setFrame:CGRectMake(15, 0, 245, cell.frame.size.height -10)]; 

    //this doesn't work at all 
    [cell.bubbleImageView setFrame:CGRectMake(10, 0, cell.frame.size.width, cell.frame.size.height)]; 

    [cell.messageTextLabel setText:[self.randomData objectAtIndex:indexPath.item]]; 

    return cell; 
} 

所以我UITableView結束運行時(電池選擇,所以你可以看到幀)看起來像這樣:

注意,我可以在我的UITableViewCell子類中設置bubbleImageView的框架,但我不知道單元格的高度將會如何。我更加困惑的是,我可以設置我的messageTextLabel的框架,而不是我的bubbleImageViews。我可能會做一些非常基本的錯誤,但這是一個簡單的問題,但由於某種原因,我正在被絆倒。

謝謝!

+0

我有你的問題的答案,但我需要回答幾個問題。你在使用xibs還是原型單元? –

+0

我正在使用一個UIViewController的故事板,其中我在viewDidLoad – JMarsh

+0

中以編程方式實例化UITableView因此,沒有原型單元格,因爲這是在故事板中具有tableview的功能。下一個問題,標籤很重要嗎?這看起來像一個文本視圖將更適合您如何顯示文本。 –

回答

1

我看到這裏2個問題:

  • 我認爲你必須啓用了自動佈局。
    在這種情況下,初始幀和autoresizingMask會自動轉換爲自動佈局約束。
    這種無邊框的改變將改變視圖的大小和位置後 - 只有約束...
  • 您沒有設置圖像視圖的contentModeUIViewContentModeScaleToFill(這是默認的,但它是更好地界定這類無論如何都是屬性)。
    只需在啓動後添加以下行:_bubbleImageView.contentMode = UIViewContentModeScaleToFill;

我認爲這裏的解決方案是自動佈局 - 正確設置約束將解決此問題。
我建議在故事板中使用表格視圖控制器和動態單元格...

+0

你是男人,謝謝。我不得不在UIImageView初始化後禁用autoresizingMask,然後必須設置contentMode。 – JMarsh

相關問題