UIPickerView размещение сверху просмотра - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь разместить UIPickerView поверх моего TableView при нажатии кнопки.Я попытался использовать раскадровку, но она сдвигает строки таблицы вниз.То, что я хочу, это чтобы средство выбора отображалось как всплывающее окно при нажатии кнопки, а затем исчезало при выборе параметра.

Вот код, который я использую для отображения средства выбора:

let picker = UIPickerView()

let container = UILayoutGuide()
view.addLayoutGuide(container)

picker.backgroundColor = UIColor.white
picker.dataSource = self
picker.delegate = self
view.addSubview(picker)
picker.leadingAnchor.constraint(equalTo: container.leadingAnchor).isActive = true
picker.trailingAnchor.constraint(equalTo: container.trailingAnchor).isActive = true
picker.topAnchor.constraint(equalTo: container.topAnchor).isActive = true
picker.heightAnchor.constraint(equalToConstant: 100).isActive = true
picker.setContentHuggingPriority(UILayoutPriority.required, for: .horizontal)

Однако средство выбора отображается следующим образом:

enter image description here

Я не понимаю, почему представление выбора не растягивается до конца, потому что я устанавливаю trailingAnchor как родительское представление trailingAnchor.

Ответы [ 5 ]

0 голосов
/ 26 января 2019

Я нашел лучший способ сделать это в самом Интерфейсном Разработчике.Мне пришлось изменить TableViewController на ViewController и поместить в него TableView (установив ViewController как TableViewDelegate и TableViewDataSource).Это позволило мне разместить PickerView на IB как многоуровневое представление поверх ячеек таблицы.Тогда я мог бы спрятать и показать его, как мне угодно, создав для него IBOutlet и соответствующим образом установив свойство .isHidden.

Дополнительная информация здесь: Swift: TableView в ViewController

0 голосов
/ 24 января 2019

Установите ограничения равными родительскому представлению, затем покажите совершенное.

let topBarHeight = UIApplication.shared.statusBarFrame.size.height +
        (self.navigationController?.navigationBar.frame.height ?? 0.0)
let picker = UIPickerView()
picker.translatesAutoresizingMaskIntoConstraints = false
let container = UILayoutGuide()
view.addLayoutGuide(container)

picker.backgroundColor = UIColor.lightGray
picker.dataSource = self
picker.delegate = self
view.addSubview(picker)
picker.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
picker.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
picker.topAnchor.constraint(equalTo: view.topAnchor, constant: topBarHeight).isActive = true
picker.heightAnchor.constraint(equalToConstant: 200).isActive = true
picker.setContentHuggingPriority(UILayoutPriority.required, for: .horizontal)
0 голосов
/ 24 января 2019

Вы установили translatesAutoresizingMaskIntoConstraints вашего выбора в false? Он игнорирует ограничения, если вы не сделаете это

0 голосов
/ 24 января 2019

Вместо руководства по компоновке вы можете напрямую использовать табличное представление как относительное.

Пример кодирования:

    func addPickerView() {
        let picker = UIPickerView()

//        let container = UILayoutGuide()
//        view.addLayoutGuide(container)

        picker.translatesAutoresizingMaskIntoConstraints = false

        picker.backgroundColor = UIColor.red
        picker.dataSource = self
        picker.delegate = self
        view.addSubview(picker)
        picker.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
        picker.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
        picker.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
        picker.heightAnchor.constraint(equalToConstant: 100).isActive = true
        picker.setContentHuggingPriority(UILayoutPriority.required, for: .horizontal)

    }

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

enter image description here

0 голосов
/ 24 января 2019

Если конечный якорь не работает, попробуйте установить влево, сверху и справа в 0, а также предоставьте высоту (если вы этого не сделаетехотите охватить полный просмотр таблицы).

Кроме того, добавьте свой pickerView в верхней части таблицы, чтобы применить эти ограничения

Do it like this

ЕслиВы хотите сделать это программно, вы можете предоставить ограничения при создании объекта UIPickerView

let pickerView = UIPickerView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 50))
...