2013-12-23 62 views
2

所以我有一個靜態的tableview,我想改變標籤在第一個tableviewcell中的位置。我有第一個單元的IBOutlet。無法更改UITableViewCell的子視圖的位置

這是我試圖改變標籤的位置:

UILabel *label1 = [tempTC.cell1.contentView.subviews firstObject]; 
label1.frame = CGRectMake(10, 10, 10, 10); 

的問題是,框架不會改變,但我可以做一切來樣改變標籤它的文字和大小等,但改變框架似乎並不奏效。

有什麼我失蹤?

+0

是否使用自動佈局? – rdelmar

+0

這不是你如何引用tableviewcell的子視圖並改變它們的框架。這可能是在tableview的委託tableView:cellForRowAtIndexPath或tableView:willDisplayCell:forRowAtIndexPath:中。 – ldindu

+0

爲什麼你不使用標籤?你可以參考它使用'[cell viewWithTag:1]'例如... – CainaSouza

回答

1

使用自動佈局時,應該設置框架,而應該改變約束。最簡單的方法是將IBOutlet轉換爲需要更改的IBOutlet,並更改約束的常量值。舉例來說,如果你有一個約束,以左側稱爲leftCon,你可以做這樣的事情:

self.leftCon.constant = 30; 
+0

是的。我使用這種方法,現在它可以工作。謝謝! –

+0

我們不能在沒有約束變化的情況下改變框架嗎? –

0

首先根據意見,禁用自動佈局。 其次,如果你想指爲textLabel使用[[UITableViewCell textLabel] setFrame:CGRectMake(10,10,10,10)];

BTW。如果你第一個UITablViewCell是特殊的,我建議使用.xibUITableviewCell的子類。將該子類應用於故事板中的原型UITableViewCell,然後將此單元原型單元添加爲屬性/全局變量。

如果您需要更多描述,請詢問:)。

0

製作一個自定義的UITableViewCell。

看看下面的例子。 內的tableView(的tableView:UITableView的,的cellForRowAtIndexPath indexPath:NSIndexPath)方法,我動態改變TimeStatus(UIView的)幀大小:

. 
. 
. 
let cell:OneTVChannelTableViewCell = tableView.dequeueReusableCellWithIdentifier(OneCurrentChannelTCIdentifier, forIndexPath: indexPath) as OneTVChannelTableViewCell 
. 
. 
. 
cell.setForRepairDynamicViewWidth(channelTimeStatusWidth) 
. 
. 
. 

這裏是我的簡單的自定義的UITableViewCell:

class OneTVChannelTableViewCell: UITableViewCell { 

@IBOutlet weak var Number: UILabel! 
@IBOutlet weak var Image: UIImageView! 
@IBOutlet weak var Title: UILabel! 
@IBOutlet weak var TimeStatus: UIView! 
@IBOutlet weak var TimeBack: UIView! 

var RepairWidth:CGFloat = 0.0 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 

    TimeStatus.frame.size.width = RepairWidth 
} 

func setForRepairDynamicViewWidth(width:CGFloat) 
{ 
    RepairWidth = width 
} 
} 
0

當你想改變frame subview那些在XIB中的約束。你需要設置translatesAutoresizingMaskIntoConstraints = YES。

label1.translatesAutoresizingMaskIntoConstraints = YES; 
label1.frame = CGRectMake(10, 10, 10, 10); 

對於細節: Can I use setFrame and autolayout on the same view?