Я пытаюсь добавить какое-то оверлейное меню на UITableViewController
. Моя первая цель - сделать так, чтобы фоновое изображение отображалось внизу экрана на очень бесплодном контроллере. Я делаю это программно, используя следующий код в обратном вызове для кнопки панели, то есть вызывается после того, как произошла оригинальная раскладка:
print("self.tableView.frame=\(self.tableView.frame)")
let settingsView = UIView()
settingsView.translatesAutoresizingMaskIntoConstraints = false
settingsView.backgroundColor = UIColor.cyan.withAlphaComponent(0.5)
self.view.addSubview(settingsView)
self.view.addConstraints([
NSLayoutConstraint(item: settingsView, attribute: .bottom, relatedBy: .equal, toItem: self.tableView, attribute: .bottom, multiplier: 1, constant: 50),
NSLayoutConstraint(item: settingsView, attribute: .leading, relatedBy: .equal, toItem: self.tableView, attribute: .leading, multiplier: 1, constant: 0),
NSLayoutConstraint(item: settingsView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: self.view.frame.width),
//NSLayoutConstraint(item: settingsView, attribute: .trailing, relatedBy: .equal, toItem: self.tableView, attribute: .trailing, multiplier: 1, constant: 0),
NSLayoutConstraint(item: settingsView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 100)
])
self.view.setNeedsLayout()
Но результат не выглядит так, как я ожидал: вместо того, чтобы быть в нижней части экрана, нижняя часть моего представления фактически выровнена с верхним полем (отсюда и значение 50
, чтобы увидеть, как оно проходит, вы Вы можете увидеть голубой цвет через панель навигации на картинке прилагается). Это почему? Если я изменю первое ограничение, чтобы выровнять вершины вместо оснований, это работает хорошо (но наверху конечно).
Кроме того, я удивлен тем, что мне нужно заменить четвертое ограничение (закомментированное, предположительно для выравнивания правого края представления с правым краем экрана) третьим (которое устанавливает ширина, но как-то кажется менее чистой). Если я использую четвертый, то вид полностью исчезает (я предполагаю, что он получает ширину 0). В чем причина?
Команда print
в начале гарантирует, что tableView
имеет правильный размер:
self.tableView.frame=(0.0, 0.0, 375.0, 667.0)
Все это кажется достаточно тривиальным, поэтому я определенно чего-то не вижу здесь ...