2012-10-19 25 views
0

所以,我有一個自定義單元格級,並在執行我有這樣的代碼:如何在自定義單元格中移動CGRect?

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    CGRect contentRect = self.contentView.bounds; 
    CGFloat boundsX = contentRect.origin.x; 
    CGRect frame; 

    frame = CGRectMake(boundsX+10,10, 50, 50); 
    picture.frame = frame; 

    frame = CGRectMake(boundsX+75 ,0, 170, 50); 
    nameLabel.frame = frame; 

    frame = CGRectMake(boundsX+75 ,43, 225, 23); 
    costLabel.frame = frame; 

    frame = CGRectMake(boundsX+280, 30, 8, 13); 
    arrow.frame = frame; 
} 

現在讓我們看看這個佈局是如何工作的下面的圖片:

enter image description here

我很滿意其結果,但我也想根據nameLabel改變細胞costLabel位置。如果有兩個linesnameLabel文字,我不想改變costLabel位置,但是如果有隻有一個linenameLabel文字,我想移動costLabel上,所以我可以驅除掉的空間,使costLabel接近nameLabel

我在的cellForRowAtIndexPath嘗試這樣做:

CGRect frame = cell.costLabel.frame; 
frame.origin.y = frame.origin.y-10; // new y coordinate 
cell.costLabel.frame = frame; 

但沒有奏效。

任何解決方案或想法,我怎麼可以改變CGRect座標(y原點)?

+0

就可以計算出,如果文本將採取單個或多個線 –

+0

我可以計算出有多少個字符?字符串,然後找出有多少行 – SmartTree

+1

我猜@Owen Hartnett的答案應該這樣做 –

回答

2

layoutSubviews是怎麼回事,當它想吸引你的細胞被調用。使layoutSubviews您的幀之間的變化(即

if (thereIsOnlyOneLineInThisCell) { 
    frame = CGRectMake(boundsX+75 ,43 -10, 225, 23); 
} else { 
    frame = CGRectMake(boundsX+75 ,43, 225, 23); 
} 

    costLabel.frame = frame; 
+0

謝謝歐文,我會試試這個。 – SmartTree

相關問題