2017-02-07 2 views
1

Я пытаюсь сделать UITableViewCell с левым и правым полями/вставками. Я сделал это в прошлом, с Objective-C, используя следующий код:Установить рамку UITableViewCell с полями в Swift

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

Этот код не напрямую перевести на Swift, так как теперь я должен переопределить переменную общественного кадра, но размещение этого кода в сеттер этой переменной не действует. Как я могу получить поля, используя это, или подобную технику в Swift?

Это 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 
    } 
} 
+0

Зачем вы кладете его в геттер? Это переопределение сеттера. – rmaddy

+0

oops Я имел ввиду setter, я отредактировал вопрос – RDSpinz

+1

Обновите свой вопрос с помощью своего кода Swift и четко объясните, в чем проблема с ним. – rmaddy

ответ

2

Прямой перевод кода 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 
    } 
} 

Нет необходимости в дополнительном имуществе. В установщике используется неявное значение newValue.

1

Вы можете сказать вам ячейку, чтобы не следовать полях Tableview таким образом:

cell.preservesSuperviewLayoutMargins = false 

И установить границы вашей ячейки таким образом:

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

Вы поместили бы это в cellForRowAtIndexPath? – RDSpinz

+0

Я бы хотел, если у вас есть собственный класс для вашей ячейки. В таком случае, возможно, это сработает. – Ocunidee

+0

Где бы вы выразились в пользовательском классе? layoutSubviews? – RDSpinz