2017-10-03 11 views
0

アンカーを設定したビューの高さに現在アクセスしようとしています。したがって、たとえば、私は自分のViewControllerに次のように使用して、左、右、上、およびsearchTableの下部にアンカーを設定します。アンカーを設定した場合、ビューの高さを取得する方法

searchTable.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
searchTable.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
searchTable.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
searchTable.bottomAnchor.constraint(equalTo: menuBar.topAnchor).isActive = true 

searchTableは、私はそれはUIViewのを継承しUIImageViewを持って作成されたクラスのオブジェクトでありますその中に。私は、init関数で次のように使用してUIImageViewを制約:

imageView.topAnchor.constraint(equalTo: topContainer.topAnchor, constant: 10).isActive = true 
imageView.leftAnchor.constraint(equalTo: topContainer.leftAnchor, constant: 10).isActive = true 
imageView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: topContainerMultiplier * imageProfileMultiplier).isActive = true 
imageView.widthAnchor.constraint(equalTo: self.heightAnchor, multiplier: topContainerMultiplier * imageProfileMultiplier).isActive = true 

searchTableのinit関数の内部では、私は半分に角の半径を設定することができるようにしたいしようと

let topContainerMultipler: Double = 1/7 
let imageProfileMultipler: Double = 1/5 

画像サイズ私はself.frame.heightself.frame.size.heightself.bounds.heightともself.heightAnchor制約の.constant値を取得を使用しようとしましたが、すべて0を返します。

私はこれを回避するための解決策があると思うだろうが、私がすることができていませんそれを見つける。

+0

view1.frame.boundsはどうですか?そして、あなたは、ビューが再ロードされたときにフレームをすぐに印刷しようとしていますか?あなたが高さを取得しようとしているときに表示するいくつかのコードを入れてください – Woof

答えて

1

制約を定義した後、レイアウトが実際にそれらの制約をフレーム矩形に解決する前に、ビューのフレームの高さを照会しています。 1つの方法は、layoutIfNeededと呼んでレイアウトを強制的に実行させ、次にview.frame.size.heightを使用することです。 initメソッドはおそらくコントローラのviewDidLoadの内部とは対照的に、これを行う適切な場所ではありません。または、viewDidLayoutSubviewsでこれを行い、ビューのレイアウトが更新されるたびに角の半径を再計算することができます(この場合、layoutIfNeededは不要です)。

+0

ボタンを押したときに実行される関数で高さにアクセスしようとしました。しかし、関数内でデバッグすると、frame.heightはまだ0です。 – kbunarjo

+0

ボタンを押すと、イメージビューは既に読み込まれ、表示され、どこに配置されていますか? – 4bar

0

すでに上端、下端、先頭と末尾を使用している場合は、高さ制約を使用しないでください。

背景色を追加するか、デバッグビュー階層ボタンを使用して視覚的にデバッグを試みます。

あなたはあなたの問題は、あなたがそれは単に初期化されますときに、オブジェクトの高さにアクセスしようとすることですが、まだ表示されていないview.frame.size.height

EDIT(OPの質問を編集)

を使用する必要がありますビューの高さを取得するには。ビューをロードした後、UIを更新して呼び出す関数を作成する必要があります。

+0

答えダミアンのおかげで、それは私が探していたものではなかった。私の問題について私が少し不明であったかもしれないので、それは私のせいだった。私はいくつかの情報+コードで私の質問を更新しました! – kbunarjo

+0

私はあなたの問題はあなたがあまりにも早く高さを取得しようとしていると思います。 –

+0

ボタンを押したときに呼び出される関数を使用して高さを取得しようとしました。しかし、それはまだ私に高さ0を与えている。私はこれをどのように乗り越えることができるか知っていますか? – kbunarjo

関連する問題