上部にUILabel、その下にUICollectionViewを含むスタックビューを追加しようとしています。私はそれがすべての側面に固定することによって、完全なビューを占めるようにスタックビューを制約しようとしています。私は、アプリケーションを実行するとUILabelが表示され、コレクションビューのスライスが表示されます。コレクションビューは、幅と高さがともにゼロであることを示します。助けていただければ幸いです。ありがとうございます。レイアウトアンカーを使用した自動レイアウトがプログラムで動作しない
var collectionView: UICollectionView!
var titleLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.translatesAutoresizingMaskIntoConstraints = false
let margins = self.view.layoutMarginsGuide
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10)
collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
layout.itemSize = CGSize(width: self.collectionView.frame.width/4, height: self.collectionView.frame.width/4)
layout.minimumInteritemSpacing = self.collectionView.frame.width/15
layout.minimumLineSpacing = self.collectionView.frame.width/5
collectionView.backgroundColor = UIColor.black
collectionView.dataSource = self
collectionView.delegate = self
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
titleLabel = UILabel()
titleLabel.translatesAutoresizingMaskIntoConstraints = false
titleLabel.textAlignment = .center
titleLabel.numberOfLines = 1
titleLabel.font = UIFont.systemFont(ofSize: 22)
titleLabel.backgroundColor = UIColor.lightGray
titleLabel.text = "Challenges"
titleLabel.textColor = UIColor.red
let stackView = UIStackView(arrangedSubviews: [titleLabel, collectionView])
stackView.backgroundColor = UIColor.white
stackView.axis = .vertical
stackView.distribution = .fillEqually
stackView.alignment = .fill
stackView.spacing = 5
self.view.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
//stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
//stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
stackView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
stackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
stackView.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 1.0).isActive = true
}
UPDATE:
私は私のコードを取り、新しいシングルビューアプリケーションでそれを実行し、期待どおりに働きました。このため、私は私がスプライトキットのゲームにこれを組み込むしようとしていることを言及する価値があると思うし、私はこれを行うことによって、ビューコントローラを発表:
let root = self.view?.window?.rootViewController
var viewC = SelectionCollectionViewController()
root?.present(viewC, animated: false, completion: nil)
は、このために私が取る必要があり、特別な手順ですスプライトキットで行われますか?
いくつか、私は問題と考えていたのいずれの項目のサイズを印刷することができます。 (1)できるだけフレームを使用しないでください。つまり、コレクションビューのフレームを 'CGRect.zero'に設定します。再び、私はこれが何らかの違いをもたらすとは思わない。 (2)あなたの制約を 'viewDidLoad'に設定しますが、特に自動レイアウトを使っている場合は、そこにあるサブビューフレームを参照しないでください。あなたは 'CGRect.zero'をとにかく持っています。代わりに、 'viewWillLayoutSubviews'でフレームを使うのが正しいかもしれないと思う"レイアウト "を設定してください。 (3)他の4つの制約を設定している場合、 'heightAnchor'を設定する必要はありません。それを取り除く。 – dfd
最後のメモ(私は部屋がなくなった)。これらの3つのうち、私は差をつける最高のチャンスを持っていることを賭けています。 – dfd
私はコードを実行し、それはUILabel - 5 ptsの間隔 - CollectionViewを示します。予想される出力は何ですか? – andyPaul