所以我有一个静态的tableview,我想在第一个tableviewcell里面改变标签的位置。我有第一个单元格的IBOutlet。
这就是我尝试更改标签位置的方法:
UILabel *label1 = [tempTC.cell1.contentView.subviews firstObject];
label1.frame = CGRectMake(10, 10, 10, 10);
问题是框架没有改变,但我可以对标签做其他所有事情,比如改变它的文字和大小等,但改变框架似乎不起作用。
我有什么遗失的吗?
答案 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);