我在2x2网格中有4个UIButton,当我切换SegmentedControl时,我希望它们将自己移动到4行的一列中。
解决此问题的最佳方法是什么?我是否需要更改当前约束,还是有其他方法?
谢谢。
答案 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)
我想你想要这样的东西:
将一列中的四个子视图重新排列为2x2网格的一种方法是使用堆栈视图。为2x2网格的2元素列创建垂直堆栈视图,然后将这两个列堆栈视图放入水平堆栈视图。然后,要将网格变成单列,请将水平堆栈视图的轴设置为垂直。
这是我的故事板:
这是我的视图控制器:
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
}
}
}