Тень от UITableViewCell обрезается UINavigationbar

У меня есть следующий код для UIView, который добавляется через cell.contentView.addSubview(insets) в каждую ячейку в UITableView:

import TinyConstraints


let insets = UIView()
insets.backgroundColor = .clear
let background = UIView()
background.backgroundColor = .white
background.layer.cornerRadius = 20
background.layer.shadowColor = UIColor.gray.cgColor
background.layer.shadowRadius = 16
background.layer.shadowOffset = CGSize(width: 0, height: 0)
background.layer.shadowOpacity = 0.5
/*
 More content like labels etc added to background
*/
insets.addSubview(background)
background.edgesToSuperview(insets: .horizontal(16) + .vertical(12))

Эти ячейки добавляются в UITableViewController, который находится внутри UINavigationController. Проблема в том, что верхняя часть тени первой ячейки обрезается панелью навигации:

введите здесь описание изображения

Я мог бы, конечно, уменьшить shadowRadius и/или увеличить смещение первой ячейки вверху. Но это увеличенное расстояние между домом и первой ячейкой выглядело бы не очень хорошо, равно как и меньший радиус тени.

Итак, мне интересно, есть ли способ позволить тени сливаться с панелью навигации?

Заранее спасибо!


person notan    schedule 15.01.2021    source источник
comment
Я бы лично сдвинул сам tableView вниз от верхней части безопасной области достаточно, чтобы ваш теневой слой был полностью виден, но вы пытались установить свойство isTranslucent (developer.apple.com/documentation/uikit/uinavigationbar/)?   -  person SuperTully    schedule 15.01.2021
comment
isTranslucent уже имеет значение true. Было бы слишком легко.   -  person notan    schedule 16.01.2021


Ответы (1)


Вы можете полностью удалить UINavigationBar из этого ViewController и создать свой собственный с помощью tableHeaderView: https://developer.apple.com/documentation/uikit/uitableview/1614904-tableheaderview. Таким образом, тень будет сливаться с заголовком.

Примечание: вы все еще можете сохранить UINavigationController, просто убрав саму полосу на главном экране.

person Arjun    schedule 15.01.2021
comment
Я добавил заголовок таблицы через раскадровку и добавил метку в функцию viewDidLoad. Но тень теперь подкрадывается к столу. То же, что и с NavigationBar. Я попытался установить layer.masksToBounds = false и clipsToBounds = false для нескольких представлений (cell, cell.contentview, insets, background, tableheaderview, label и т. д.), но пока это не сработало. Любые идеи? - person notan; 16.01.2021
comment
@notan Вы можете попробовать сделать это: stackoverflow.com/questions/22305169/. tableView.tableHeaderView?.layer.zPosition = -1 - person Arjun; 17.01.2021