Как создать панель навигации, как на странице исполнителя Apple Music - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь создать панель навигации (все, что выше «лучших песен» на скриншоте), похожую на ту, которая используется на страницах исполнителей в приложении Apple Music.На iPhone X фотография на обложке должна сливаться с надрезом (то есть за пределами безопасной зоны).Я также хочу иметь возможность добавлять элементы пользовательского интерфейса, такие как UILabels, в панель навигации.

Снимок экрана: https://i2.wp.com/9to5mac.com/wp-content/uploads/sites/6/2018/06/apple-music-artist-update.jpg

До сих пор я пытался использовать UITableViewController.Я установил параметр inset содержимого tableview равным «Never», что, похоже, делает эту работу.Однако при перетаскивании вниз, когда табличное представление уже находится в верхней ячейке, раскрывается фон UITableView.При перетаскивании таблицы вниз фоновое изображение первой ячейки следует растягивать, а не перемещать вместе с содержимым ячейки.

Спасибо.

1 Ответ

0 голосов
/ 02 января 2019

Разобрался с решением:

Сначала откройте раскадровку, перетащите UIView на верх "ячейки прототипа".Затем определите следующую глобальную переменную в файле контроллера представления:

var headerView: UIView!
var HEADER_HEIGHT: CGFloat = 400

Чтобы обновить представление заголовка (т.е. растянуть) при прокрутке, вызовите следующую функцию в методе scrollViewDidScroll:

func updateTableHeader() 
{
    var headerFrame = CGRect(x: 0, y: -HEADER_HEIGHT, width: tableView.bounds.width, height: HEADER_HEIGHT)
    if tableView.contentOffset.y < -HEADER_HEIGHT
    {
        headerFrame.origin.y = tableView.contentOffset.y
        headerFrame.size.height = -tableView.contentOffset.y
    }
    headerView.frame = headerFrame
}

Также, в viewDidLoad, headerView должен быть настроен с использованием следующего метода:

func setupHeaderview()
{
    headerView = tableView.tableHeaderView
    tableView.tableHeaderView = nil
    tableView.addSubview(headerView)
    tableView.contentInset = UIEdgeInsets(top: HEADER_HEIGHT, left: 0, bottom: 0, right: 0)
    tableView.contentOffset = CGPoint(x: 0, y: -HEADER_HEIGHT)
    updateTableHeader()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...