2015-11-08 4 views
0

У меня есть пользовательский UITableViewCell, который я пытаюсь настроить в банке для моего табличного представления. У меня есть метод, который используется для настройки моей ячейки, setupCell(), который, похоже, не правильно меняет.Когда устанавливается высота нибы?

я установить высоту в методе Tableview heightForRow так:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    let cell = tableView.dequeueReusableCellWithIdentifier(kProfilePicIdentifier) as! ProfilePictureTableViewCell 
    return cell.computeHeight() 
} 

Это занимает ячейку с этим методом, чтобы установить высоту:

override func computeHeight() -> CGFloat { 
    let screenRect = UIScreen.mainScreen().bounds 
    let height = screenRect.height * 0.4 

    return height 
} 

Метод setupCell выглядит так:

override func setupCell() { 
    profilePicture.image = UIImage(named: "prof_pic") 
    profilePicture.layer.cornerRadius = profilePicture.frame.size.height/4.6 
    profilePicture.clipsToBounds = true 
} 

Формула cornerRadius - это то, что заставляет его работать именно для той высоты, которую я установил. Но, как только я изменяю высоту функции computeHeight, которая, в свою очередь, изменяет высоту строки tableViewCell, круг становится испорченным, потому что, похоже, он не получает правильную высоту.

Разъем profilePicture устанавливается равным половине размера общей высоты представления, но, похоже, это не отражается на том, что когда я звоню setupCell, он всегда устанавливается на постоянный размер, а не на половину размера вид.

Кто-нибудь знает, когда на самом деле установлена ​​высота ячейки? И когда можно было бы называть этот метод так, чтобы я мог легко разделить высоту на 2, чтобы получить радиус?

Редактировать: Так что мне не удалось заставить его работать, поместив угловую логику в layoutSubviews(), однако мне все еще интересно узнать, когда установлены фактические высоты изображений внутри ниба.

ответ

0

Если вы используете автоматическую компоновку, вы можете переопределить viewDidLayoutSubviews, которые будут вызываться сразу после прохода механизма компоновки. viewDidlayoutSubviews можно вызвать несколько раз. К тому времени, когда в последний раз viewDidLayoutSubviews вызывается, все кадры представления viewController установлены. Однако, когда установлен определенный фрейм, он не определен, но вы можете поместить оператор print в viewDidLayoutSubviews, чтобы понять, какой пропуск установлен в его кадре.

Смежные вопросы