Переставить UIB-кнопки программно - PullRequest
1 голос
/ 23 мая 2019

У меня есть 4 кнопки UIB в сетке 2x2, и я хочу, чтобы они перемещались в один столбец с 4 строками, когда я переключал SegmentedControl.

Как лучше всего это сделать?Нужно ли менять текущие ограничения или есть другой способ?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Вы можете использовать UICollectionViewController.

При нажатии UISegmentControl вы можете изменить размер ячейки в методе sizeForItemAtIndexPath() в зависимости от условия.

Пример кода:

class YourViewController : UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        if (listViewType == "kTileView") {
            let size = collectionView.frame.width / 2
            return CGSize(width: size, height: 50)
        }
        else {
            let size = collectionView.frame.width
            return CGSize(width: size, height: 50)
        }
    }
}
1 голос
/ 23 мая 2019

Полагаю, вы хотите что-то вроде этого:

demo

Один из способов перестановки четырех подпредставлений из столбца в сетку 2x2 - использование стековых представлений. Создайте вертикальный вид стека для двухэлементного столбца сетки 2x2 и поместите эти два стека в горизонтальный вид. Затем, чтобы превратить сетку в один столбец, вы устанавливаете вертикальную ось горизонтального вида стека.

Вот моя раскадровка:

storyboard

А вот мой контроллер вида:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        updateViews()
    }

    @IBOutlet var segmentedControl: UISegmentedControl!
    @IBOutlet var rearrangingStackView: UIStackView!

    @IBAction func segmentedControlValueChanged(_ sender: Any) {
        UIView.animate(withDuration: 0.25) {
            self.updateViews()
            self.view.layoutIfNeeded()
        }
    }

    private func updateViews() {
        if segmentedControl.selectedSegmentIndex == 0 {
            rearrangingStackView.axis = .vertical
        } else {
            rearrangingStackView.axis = .horizontal
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...