UITableViewController.UIView.trailingAnchor имеет другую позицию, чем UIViewController.UIView.trailingAnchor - PullRequest
1 голос
/ 01 февраля 2020

У меня есть метод, чтобы добавить два круга в фоновом режиме. При добавлении в представление UIViewController они добавляются правильно. Однако при добавлении к виду UITableViewController они добавляются на другую сторону.

Метод создания кругов:

extension UIViewController {
    func makeCircle(radius: CGFloat) -> UIView {
         let circle = UIView()
         circle.backgroundColor = .yellow
         circle.translatesAutoresizingMaskIntoConstraints = false
         circle.layer.cornerRadius = radius
         NSLayoutConstraint.activate([
             circle.widthAnchor.constraint(equalToConstant: radius * 2),
             circle.heightAnchor.constraint(equalToConstant: radius * 2)])
         return circle
    }
}

Метод добавления кругов внутри расширения UIViewController:

func addCircles() {
    // Center right circle
    let circle1Radius = CGFloat(152)
    let circle1 = makeCircle(radius: circle1Radius)
    view.addSubview(circle1)
    NSLayoutConstraint.activate([
        circle1.centerYAnchor.constraint(equalTo: view.centerYAnchor),
        circle1.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: circle1Radius)])

    // Bottom left circle
    let circle2Radius = CGFloat(77)
    let circle2 = makeCircle(radius: circle2Radius)
    view.addSubview(circle2)

    NSLayoutConstraint.activate([
        circle2.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 70),
        circle2.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: -50)])
}

Для обоих классов круги добавляются в метод viewDidLoad:

 class ViewController: UIViewController {
      override func viewDidLoad() {
          super.viewDidLoad()
          addCircles()
      }
 }

ViewController: UIViewController, вид выглядит правильно :

enter image description here

Однако для TableViewController: UITableViewController (точно такой же viewDidLoad, как для контроллера выше), вывод выглядит наоборот:

enter image description here

Может кто-нибудь дать мне совет, что я делаю неправильно?

1 Ответ

1 голос
/ 01 февраля 2020

Благодаря комментарию @ matt:

Я предполагаю, что это потому, что табличное представление является представлением прокрутки. Помните, что ограничения от подпредставления представления прокрутки к представлению прокрутки имеют совершенно другое значение от ограничений от подпредставления обычного представления до его суперпредставления. Поэтому добавление подпредставлений непосредственно в табличное представление с использованием ограничений будет работать странно.

То, что решило мою проблему, заключалось в том, чтобы больше не использовать UITableViewController, а "basi c" UIViewController, который имеет UITableView и реализует UITableViewDataSource и UITableViewDelegate:

class TableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        addCircles()
    }
}
...