2016-04-17 4 views
0

私はストーリーボードからUICollectionViewを作成し、ビューに一時的に配置しました。しかし、私は、ストーリーボード構成を使用するのではなく、起動時にプログラムで位置を上書きしたいと考えています。UICollectionViewの幅がプログラムによってストーリーボードの初期化と競合します

enter image description here

私はviewDidLoad()はこの変更を行う配置するために適切な場所だと思いましたか?

スウィフト2コード:

override func viewDidLoad() { 
    super.viewDidLoad() 

    collectionView.dataSource = self 
    collectionView.delegate = self 
    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "collectionCell") 
    collectionView.backgroundColor = UIColor(white:1, alpha:0.0) 

    // Doesn't stretch the width to the device's width on launch. :-(
    collectionView.frame.size = CGSize(width: UIScreen.mainScreen().bounds.width, height: 200)   
} 
+0

あなたはautolayoutを使用していますか?インターフェイスビルダーからストーリーボード手段の制約を設定しましたか? – Lion

+0

はい、インターフェースビルダーから制約を設定しました。ストーリーボード上のUICollectionViewのオブジェクトに移動して制約をクリアする以外の方法をリセットする方法はわかりませんが、それは役に立ちません。プログラムで幅を変更することはありません。 – theflarenet

答えて

2

あなたが制約を設定し、その後、あなたはその高さや幅の出口を取り、それが一定の値ですincreamentすべきheightまたはwidthを変更したい場合。 ctrl +幅の制約からクラスにドラッグしてアウトレ - トを作成し、そのアウトラートのコンタープロパティをviewdidloadに増やします。例えば

@IBOutlet weak var heightConstraint: NSLayoutConstraint! 

self.heightConstraint.constant = 200 

そして、あなたは、デバイスと同等のあなたのcollectionviewの高さを維持したい場合は、2番目のものは、その後、プログラム的に設定する必要はありません。適切な制約を設定すると、autolayoutはそれを管理します。その主なポイントは、evrywhereでのautolayoutの使用かどうかです。 autolayoutの両方を混ぜて、フレームをプログラマチックに設定しないでください。

これが役に立ちます。enter image description here

+0

興味深い回避策。私は今それを試しているが、私はCTRL + XIBのストーリーボードから正確にドラッグしているか分からない。最初にUICollectionViewのオブジェクトを選択していますか? – theflarenet

+0

ストーリーボードで赤色でなければならない制約線を選択する必要はなく、 –

+0

というコードにCtrl +ドラッグするだけで、制約を選択してコントロール+ドラッグしてクラスにドラッグできます。アシスタントエディタをあなたのクラスの横に開いたままにしておきます。私はあなたが良いアイデアを持っているので、イメージをアップロードしています。 – Lion

関連する問題