无法更改UITableViewCell的子视图的位置

时间:2013-12-23 16:08:38

标签: ios cocoa-touch uitableview

所以我有一个静态的tableview,我想在第一个tableviewcell里面改变标签的位置。我有第一个单元格的IBOutlet。

这就是我尝试更改标签位置的方法:

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

问题是框架没有改变,但我可以对标签做其他所有事情,比如改变它的文字和大小等,但改变框架似乎不起作用。

我有什么遗失的吗?

4 个答案:

答案 0 :(得分:1)

使用自动布局时,您应该设置框架,您应该改变约束。最简单的方法是将IBOutlet设置为需要更改的值,并更改约束的常量值。例如,如果左边有一个名为leftCon的约束,你可以这样做:

self.leftCon.constant = 30;

答案 1 :(得分:0)

首先根据评论,禁用自动布局。 第二,如果你想参考textLabel使用[[UITableViewCell textLabel] setFrame:CGRectMake(10,10,10,10)];

顺便说一句。如果您首先UITablViewCell特殊,我建议使用.xib和子类UITableviewCell。将该子类应用于storyboard中的原型UITableViewCell,然后将此单元格原型单元格添加为属性/全局变量。

如果您需要更多描述,请询问:)。

答案 2 :(得分: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
}  
}

答案 3 :(得分:0)

当您想要更改帧子视图时,这些是XIB中的约束。您需要设置translatesAutoresizingMaskIntoConstraints = YES。

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

详细信息: Can I use setFrame and autolayout on the same view?