Как я могу поддерживать собственные размеры ячеек на iOS7?

С выпуском iOS8 я разработал свой табличный вид с ячейками, использующими ячейки для самостоятельной калибровки. Но мне нужны мои таблицы для работы в iOS7. Как мне это сделать? Есть ли способ проверить, поддерживаются ли я сами ячейки размера или нет во время выполнения, или я могу реализовать некоторые методы делегирования таблицы в моем контроллере, которые не будут вызываться в iOS7?

Если я попробую таблицу с ячейками самостоятельной калибровки в iOS7, я получаю ошибки на консоли следующим образом:

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7fc912d1d5a0 V:|-(>=11)-[UILabel:0x7fc912d13900]   (Names: '|':UITableViewCellContentView:0x7fc912d13400 )>",
    "<NSLayoutConstraint:0x7fc912d1d6b0 V:[UILabel:0x7fc912d13900]-(11)-|   (Names: '|':UITableViewCellContentView:0x7fc912d13400 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x7fc912d24d80 h=--& v=--& V:[UITableViewCellContentView:0x7fc912d13400(0.5)]>"
)

Ответы

Ответ 1

Это решение, которое я нашел до сих пор, но для этого требуется проверка определенного номера версии, а не возможности. Вы устанавливаете только UITableViewAutomaticDimension, если у вас есть версия iOS 8 или выше в качестве версии:

override func viewDidLoad() {

    if NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1 {
        self.tableView.estimatedRowHeight = 80
        self.tableView.rowHeight = UITableViewAutomaticDimension
    }
}

Для iOS 7 вам нужно вычислить высоту для каждой ячейки. Но если вы находитесь на iOS 8, вы можете вернуть UITableViewAutomaticDimension в качестве высоты:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1 {
        return UITableViewAutomaticDimension
    }
    return 50 // Or whatever calculated value you need for cell height
}

Ответ 2

Для версий iOS старше 8.0 вы всегда можете написать обычный метод heightForRowAtIndexPath, в котором вы создаете ячейку, запустите прогон автомакета и верните фактическую высоту.