2017-05-28 6 views
1

グリッドを作成するためにビューのネストされたスタックビューを持つスタックビューを作成しようとしています。グリッド内のすべてのセルにはラベルが必要です。私が持っている問題は、ラベルのみthis screenshotのように非常に最初のビューに表示されていることである。UILabelがスーパービューに常に表示されるとは限りません

for _ in 1...5 { 
    let view = WeekView()  
    addArrangedSubview(view) 
} 

そして、これは、ネストされたスタックビューのコードです:

私のメインスタックビューのコードは簡単です。

// Function called in init(frame:) 
func configureView() { 

    spacing = 8 

    for _ in 1...7 { 
     let view = UIView() 
     let label = UILabel() 
     view.addSubview(label) 
     addArrangedSubview(view) 

     label.text = "hi" 
     label.textAlignment = .center 

     view.widthAnchor.constraint(equalToConstant: 40).isActive = true 
     view.translatesAutoresizingMaskIntoConstraints = false 

     label.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 
     label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
     label.translatesAutoresizingMaskIntoConstraints = false 
    } 
} 

どのような示唆も多くの賛同があります。

+0

あなたは、ラベルのためだけにその幅と高さを位置を設定されていません。 – Sulthan

+0

提案してくれてありがとうございましたが、あなたがビューを動かすと、そのサブビューもすべて一緒に動くと思っていましたが、それは本当ですか?しかし、私は 'label.frame.origin = view.frame.origin'を呼び出そうとしましたが、助けにはなりませんでした。 – bohdankoshyrets

+0

あなたの自動サイズ変更マスクが使用されていないので、 'frame'を使って位置を設定することはできません。ラベルごとにXとYの位置に制約を追加する必要があります。それ以外の場合、位置はランダムになります。 – Sulthan

答えて

1

ラベルの位置を設定していません。あなたは、水平方向と垂直方向の制約を追加することができますが、あなたは、単に行うことができます。

label.translatesAutoresizingMaskIntoConstraints = true 
label.frame = view.bounds 
label.autoresizingMask = [.flexibleWidth, .flexibleHeight] 

代わりの

label.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 
label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
label.translatesAutoresizingMaskIntoConstraints = false 
0

問題は、あなたがUI要素を作成した後、直接それを設定してみてくださいあなたは

label.translatesAutoresizingMaskIntoConstraints = false 

を設定していないということかもしれません:まだ

let view = UIView() 
view.translatesAutoresizingMaskIntoConstraints = false 
let label = UILabel() 
label.translatesAutoresizingMaskIntoConstraints = false 
view.addSubview(label) 
... 
view.widthAnchor.constraint(equalToConstant: 40).isActive = true 
view.heightAnchor.constraint(equalToConstant: 40).isActive = true 

、あなたのケースでは、私は非常にお勧めですUICollectionViewを使用してください。あなたがそれを使うならば、あなたは自由に多くのものを得る(滑らかな水平スクロールを含む)。 カレンダーアプリを作成しているような画像が表示されます。 UICollectionViewを使用すると、スペーシングや全体的なレイアウトに非常に柔軟なAPIも得られます。

+0

提案をいただき、ありがとうございます。私は 'view.translatesAutoresizingMaskIntoConstraints'を追加しました。残念ながら、それは役に立たなかった。実際には私は 'UICollectionView'を目指していましたが、なぜこのラベルがこのように動作しているのかを知りたければ、このコードを使ってこのコードを書き直すつもりです。 – bohdankoshyrets

関連する問題