在Swift中使用边距设置UITableViewCell的框架

3

我尝试创建一个带有左右边距/插入的UITableViewCell。以前我使用以下Objective-C代码实现过:

- (void)setFrame:(CGRect)frame {
    frame.origin.x += 25;
    frame.size.width -= 2 * 25;
    [super setFrame:frame];
}

这段代码不能直接转换为Swift,因为现在我必须重写公共frame变量,但将此代码放置在该变量的setter中没有任何效果。如何使用此方法或类似方法使边距显示出来?

这是我尝试的Swift代码:

private var otherFrame: CGRect = CGRectZero
override public var frame: CGRect {
    get {
        return otherFrame
    }
    set {
        otherFrame = frame
        otherFrame.origin.x += 25
        otherFrame.size.width -= 2 * 25
    }
}

为什么你要把它放在getter里?这是对setter的重写。 - rmaddy
抱歉,我是说setter,我编辑了问题。 - arc4randall
1
请更新您的问题,附上您尝试过的Swift代码,并清楚地解释您遇到的问题。 - rmaddy
2个回答

8

Objective-C 代码的直接翻译如下:

override var frame: CGRect {
    get {
        return super.frame
    }
    set {
        var frame = newValue
        frame.origin.x += 25
        frame.size.width -= 2 * 25

        super.frame = frame
    }
}

不需要额外的属性。在setter中使用隐式值newValue


谢谢!在找到这个之前,我浪费了整整两天的时间。现在它运行得非常好! - Aravindan Ve
如果只减少宽度,似乎会截断一些标签文本。如何调整高度以解决此问题? - frank61003
还有没有类似的方法来设置节标题? - hotdogsoup.nl

0

你可以通过以下方式告诉你的单元格不要遵循tableView的边距:

cell.preservesSuperviewLayoutMargins = false

然后以这种方式设置单元格的边距:

cell.layoutMargins = UIEdgeInsets(top: 0, left: 25, bottom: 0, right: 25)

1
你会把这个放在cellForRowAtIndexPath里面吗? - arc4randall
1
我会尝试,除非你的单元格有自定义类。如果是这种情况,也许可以从那里开始尝试。 - Ocunidee
1
你会把它放在自定义类的哪里?layoutSubviews吗? - arc4randall
1
in awakeFromNib() - Ocunidee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接