В той же теме, что и этот пост:
iOS 13 — исходный код UIPopoverPresentationController видно по стрелке
У меня есть экземпляр UITableViewController, созданный из раскадровки. Я представляю это в UIPopoverViewController.
В зависимости от ориентации у меня либо отсутствует сторона, либо отсутствует верх, а содержимое _UITableViewHeaderFooterViewBackground прокручивается «сквозь» стрелку.
Что случилось:
Это когда сверху, а если сбоку, то и по всей стороне
РЕДАКТИРОВАТЬ: Я использую руководства по безопасным зонам:
Как я уже говорил ранее, я перетащил из библиотеки объектов совершенно новый UITVC, а затем изменил ячейку прототипа в соответствии с требованиями моего приложения.
Я не вносил никаких изменений в какие-либо переключатели или настройки безопасной зоны.
Я не меняю никаких вставок или настроек безопасной области в коде.
Итак, спасибо @Alex, но проблема не в этом, а если и в этом, то я не знаю, что с этим делать.
РЕДАКТИРОВАТЬ 2:
Сегодня днем я удостоверился, что в моих классах нет кода, который выполняет какое-либо форматирование, цвета, вставки или ЧТО-НИБУДЬ, связанное с ЛЮБОЙ формой изменения ячеек таблицы по умолчанию.
Затем я полностью удалил свой UITVC в IB и создал новый, создал новую ячейку прототипа без стилей, кроме как поместить в ячейку UIImageView.
Я убедился, что в UITVC, tableviewcell и просмотре содержимого в IB отмечены «Безопасная область» и «Безопасные поля».
Пересобрал приложение и запустил.
ТОЧНО ТАК ЖЕ.
У меня по-прежнему есть и контент, и фон, проходящие по стрелке, и если я затем добавлю рамку вокруг таблицы, сторона представления «обрезается».
РЕДАКТИРОВАТЬ 3:
Я ЗНАЮ В ЧЕМ ПРОБЛЕМА!!!
Это _UITableViewHeaderFooterViewBackground, который плохо работает с AutoLayout!!
Я не уверен, как это исправить, но проблема именно в этом.
РЕДАКТИРОВАТЬ 4/обновить:
Сегодня я создал следующее приложение, и ошибка все еще присутствует - даже без заголовков разделов!
В IB создайте UIVC с двумя кнопками, одна вверху слева, другая вверху справа.
Перетащите UITVC из каталога активов и поместите его на одну сторону исходного VC, затем перетащите UIVC из библиотеки активов и поместите его на другую сторону.
Перетащите UITableView из библиотеки активов в «новый» UIViewController и просто установите его верх и низ в макеты безопасных областей руководства, а левый и правый - в безопасные поля с константой 0 (вы можете оставить значение по умолчанию 20 - не имеет значения ).
Теперь подключите эти кнопки к исходному UIVC, чтобы нажатие каждой из них создавало экземпляр одного или двух других контроллеров и отображало их во всплывающем окне.
Обратите внимание, что нет ни форматирования, ни стиля, ни изменения ЛЮБЫХ настроек IB по умолчанию на любом из UIViewController.
Вот «центральный» код VC:
import UIKit
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate
{
@IBOutlet weak var tbutton: UIButton!
@IBOutlet weak var button: UIButton!
@IBAction func buttonTouched(_ sender: UIButton)
{
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let libraryVC = storyboard.instantiateViewController(withIdentifier: "library")
libraryVC.modalPresentationStyle = .popover
if let popover = libraryVC.popoverPresentationController
{
popover.sourceView = self.button
popover.sourceRect = self.button.bounds
popover.delegate = self
}
libraryVC.preferredContentSize = CGSize(width: 400, height: 2048)
libraryVC.view.layer.borderColor = UIColor.white.cgColor
libraryVC.view.layer.borderWidth = 5.0
libraryVC.view.layer.cornerRadius = 16.0
self.present(libraryVC, animated: true)
}
@IBAction func tbuttonTouched(_ sender: UIButton)
{
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let libraryVC = storyboard.instantiateViewController(withIdentifier: "tlibrary")
libraryVC.modalPresentationStyle = .popover
if let popover = libraryVC.popoverPresentationController
{
popover.sourceView = self.tbutton
popover.sourceRect = self.tbutton.bounds
popover.delegate = self
}
libraryVC.preferredContentSize = CGSize(width: 400, height: 2048)
libraryVC.view.layer.borderColor = UIColor.white.cgColor
libraryVC.view.layer.borderWidth = 5.0
libraryVC.view.layer.cornerRadius = 16.0
self.present(libraryVC, animated: true)
}
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle
{
return .none
}
Вот макет в IB — обратите внимание, что я изменил цвета фона на всех представлениях по-разному, чтобы вы могли видеть, какие представления вызывают проблемы.
А вот код от каждой стороны VC:
import UIKit
class LibraryViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
@IBOutlet weak var table: UITableView!
override func viewDidLoad()
{
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
12
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
guard let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as? MyTableViewCell else
{
fatalError("expected to dequeue MenuItemTableCell - check storyboard")
}
return cell
}
}
и другие:
import UIKit
class LibraryTableViewController: UITableViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
}
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
// #warning Incomplete implementation, return the number of rows
return 10
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
guard let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as? MyTableViewCell else
{
fatalError("expected to dequeue MenuItemTableCell - check storyboard")
}
return cell
}
}
Вот конфиг ИБ:
UITableViewController
. Он уже будет настроен, чтобы делать правильные вещи. - person rmaddy   schedule 28.09.2019contentView
. - person rmaddy   schedule 28.09.2019