Как изменить высоту отдельной ячейки в разделе

У меня есть одна проблема, я хочу изменить размер конкретной ячейки в разделе.

Пример:

enter image description here

Как вы можете видеть на изображениях, я хочу изменить размер ячейки для второго раздела Table views для первой ячейки.

Как моя ячейка имеет фиксированное значение высоты.

enter image description here

И я хочу, чтобы высота ячейки изменялась в зависимости от разрешения экрана, у меня есть модуль, который определяет, на каком устройстве запускается приложение, и, например, если это iPhone X, я хочу изменить этот размер ячейки на 300

Как я могу это сделать?

Вам вопрос непонятен. Когда вы хотите изменить высоту? А как теперь выставить высоту?

Rakesha Shastri 26.10.2018 09:19

@Rakesha Shastri обновление

Andrew 26.10.2018 09:23

Реализуйте высоту с помощью делегата heightForRowAt.

Rakesha Shastri 26.10.2018 09:30

@Rakesha Shastri это я знаю, но как я могу изменить высоту только для одной ячейки в разделе 2

Andrew 26.10.2018 09:31

Эндрю, вы пытаетесь динамически настроить эту ячейку, чтобы заполнить всю высоту экрана?

rptwsthi 26.10.2018 09:33
2
5
346
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете сделать это программно, согласовав UITableViewDelegate и UITableViewDataSource в вашем ViewController и реализовав приведенный ниже код. Надеюсь это поможет...

extension ViewController: UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.section == 0 {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "yourFirstCell", for: indexPath) as? YourFirstCell else { return UITableViewCell() }
            return cell
        } else {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "yourSecondCell", for: indexPath) as? YourSecondCell else { return UITableViewCell() }
            return cell
        }
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 2
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.section == 0 {
            return 50
        } else {
            if indexPath.row == 0 {
                return checkRowHeight()
            } else {
                return 50
            }
        }
    }

    func checkUserPhone() -> Int {
        var rowHeight = Int()
        if UIDevice().userInterfaceIdiom == .phone {
            switch UIScreen.main.nativeBounds.height {
            case 1136:
                print("iPhone 5 or 5S or 5C")
                rowHeight = 202
            case 1334:
                print("iPhone 6/6S/7/8")
                rowHeight = 202
            case 1920, 2208:
                print("iPhone 6+/6S+/7+/8+")
                rowHeight = 202
            case 2436:
                print("iPhone X, Xs")
                rowHeight = 300
            case 2688:
                print("iPhone Xs Max")
                rowHeight = 300
            case 1792:
                print("iPhone Xr")
                rowHeight = 300
            default:
                print("unknown")
                rowHeight = 202
            }
        }
        return rowHeight
    }
}

Та работа, которую вы здесь проделали. :-)

rptwsthi 26.10.2018 09:34

Не могли бы вы уточнить свой вопрос? На данный момент, насколько я понимаю, вы хотите, чтобы ячейки в первом разделе были одного размера, первая ячейка во втором втором менялась в зависимости от модели iPhone пользователя, а затем для остальных ячеек было другое значение?

WH48 26.10.2018 09:56

@ Андрей. Вы не можете просто изменить вопрос после того, как получите ответ. Если вы получили помощь, примите ее и задавайте разные вопросы в разных обсуждениях.

Desdenova 26.10.2018 11:29

Вы можете установить размер здесь, как хотите

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 140
} 

Другие вопросы по теме