シナリオ -ビューの高さが&の幅のラベルがあります。高さと幅がスーパービューの高さと幅に揃っています(寸法が可変で、ビューごとに変更されることを示しています)。 ラベルのプロパティを変更する必要があります。私は、関数の中でそう -異なる場合でUIの更新が異なる場合
func ammendViews()
{
noOfStudentsLbl.layer.masksToBounds = true
noOfStudentsLbl.layer.cornerRadius = noOfStudentsLbl.frame.height/2
maleCountLbl.clipsToBounds = true
maleCountLbl.layer.cornerRadius = maleCountLbl.frame.height/2
femaleCountLbl.clipsToBounds = true
femaleCountLbl.layer.cornerRadius = femaleCountLbl.frame.height/2
noOfStudentsLbl.hidden = false
maleCountLbl.hidden = false
femaleCountLbl.hidden = false
}
効果2
ケース - 1(のviewDidLoad()& viewWillAppear() )
私はviewDidLoad()でこの関数を呼び出しました& viewWillAppear()そしてそれは効果1を持っていました。
ケース - 2(viewDidLayoutSubViews())
私は(viewDidLayoutSubViewsでそれを呼ばれる)との変更は、当初EFFECT1として登場し、いくつかの時間後にEFFECT2に変更。
ケース - 2(dispatch_async)
そして私はと非同期方式でmainQueueに入れて -
override func viewWillAppear(animated: Bool)
{
dispatch_async(dispatch_get_main_queue()) {
self.ammendViews()
}
}
そして、これは効果-2を示す働いていました!
私の理解 - 私のラベルの寸法がダイナミックだったつまり、デバイスサイズの上で、メインビューの大きさに依存し、viewWillAppear()とのviewDidLoad()が呼び出されたときに、ビューが適切にそうそこに置かれていなかったので、私のレーベルの半分の効果でした。
viewDidLayoutSubViews()を呼び出すと、ビューは既に変更されているためレイアウトされていますが、数秒間中断された後にはどうなったのですか?
そして、私は
ここdispatch_async(dispatch_get_main_queue()) {
}
に、私は非同期的が、メインスレッドでやっていた、だから私は直接mainQueueでそれをしたとき、なぜそれが起こらなかったことを置いたときに、なぜそれがすべてが完璧に動作しなかった(非同期ではありません)。
しかし、viewDidLayoutSubviewsにもいくつかの欠陥があります。私は私の質問で説明した。何故ですか ? –
何か奇妙なことが起こっています。どのようにあなたのUIをレイアウトしていますか?ストーリーボードまたはコードで。 UIの作業がメインスレッドで行われていることを確認してください。コードでUIをレイアウトする場合は、 'layoutIfNeeded'コールが必要な場合があります。 – vacawama