Размеры табличного представления с программными ограничениями - PullRequest
0 голосов
/ 30 ноября 2018

У меня небольшие проблемы с программными ограничениями для моего UITableView.

У меня правильная ширина, но не высота, так как у меня также есть небольшая полоска в верхней части страницы, котораяэто просто цвет UIView.Поэтому я хочу сделать так, чтобы табличное представление начиналось точно в нижней части панели, но также имело ограничения для всего экрана.

Вот мой код для tableView,

tableView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - 110)
tableView.center = CGPoint(x: self.view.center.x, y: self.view.center.y + 20)

Так что tableView выравнивается по верхней полосе, но теперь не достигает нижней части экрана.Любая помощь?

Больше код:

     //Top Bar
    topBar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 150)
    topBar.center = CGPoint(x: self.view.center.x, y: self.view.frame.minY)
    topBar.backgroundColor = UIColor.init(fromHexCode: "1462BF")
    view.addSubview(topBar)

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Установка рамки и центра не достаточна, потому что рамка вашего представления может измениться, когда контроллер представления нажат / представлен.Что вы должны сделать, это использовать ограничения макета.Я считаю, что Layout Anchors является самым простым способом программного создания ограничений

tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.topAnchor.constraint(equalTo: topBar.bottomAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

Как вы можете видеть, ваш верхний якорь tableView выровнен с вашим нижним якорем topBar, а другие ограничения tableView выровнены поведущий, трейлинг и дно.

0 голосов
/ 30 ноября 2018

Если вы используете AutoLayout, тогда установка фреймов не будет работать, просто установите правильные ограничения в положение UITableView в UIViewController

  1. установите translatesAutoresizingMaskIntoConstraints = false для tableView для использования AutoLayout
  2. Применение ограничений к положению и виду

    enter code heretableView.translatesAutoresizingMaskIntoConstraints = false
    
    NSLayoutConstraint.activate([
        tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        tableView.topAnchor.constraint(equalTo: view.topAnchor),
        tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -110)
    ])
    
0 голосов
/ 30 ноября 2018

Если вы используете автоматическую разметку (NSLayoutConstraint), вам не нужно размещать рамку или центрировать ее в tableView.

Если вы не используете автоматическую разметку, вы должны создать рамку для tableView, как показано ниже:

tableView.frame = CGRect(x: 0, y: heightOfYourSmallBar, width: self.view.frame.width, height: self.view.frame.height - heightOfYourSmallBar)
...