以编程方式重新定位UIButton

时间:2019-05-23 04:54:13

标签: swift xcode button

我在2x2网格中有4个UIButton,当我切换SegmentedControl时,我希望它们将自己移动到4行的一列中。

解决此问题的最佳方法是什么?我是否需要更改当前约束,还是有其他方法?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用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 :(得分:1)

我想你想要这样的东西:

demo

将一列中的四个子视图重新排列为2x2网格的一种方法是使用堆栈视图。为2x2网格的2元素列创建垂直堆栈视图,然后将这两个列堆栈视图放入水平堆栈视图。然后,要将网格变成单列,请将水平堆栈视图的轴设置为垂直。

这是我的故事板:

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
        }
    }
}