2017-10-21 6 views
0

私はxcode 9.0.0を使用しています。私は、異なるビューに複数のカスタムクラスを適用しています。実際のプラスサイズのデバイスでプロジェクトを実行するたびに、完璧なビューが表示されますが、シミュレータでビルドしている間は、レイアウトが右側から圧縮されます。これは、任意のUIView型で発生します。以下に例を示します。ここでxcode 9シミュレータレイアウトの誤動作

enter image description here

は、私が勾配を適用しています、しかし、右側の部分が省かれています。そして、これはあらゆる視点で起こります。上記の例のコードは次のとおりです。

func addBlackGradientLayer(frame: CGRect){ 
    let gradient = CAGradientLayer() 
    gradient.frame = frame 
    gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor] 
    gradient.locations = [0.0, 1.0] 
    self.layer.addSublayer(gradient) 
} 

私は今、すべての手がかりから完全に外れています。どんな助けでも大歓迎です。

+0

矛盾するか不十分な制約について警告を受けていますか?どんな制約を設定しましたか?あなたはあなたが示したコードをどこで呼びますか? – Paulw11

+0

この関数をどこで呼びますか?あなたは、 'view'の' frame'が完全にレイアウトされる前にそれを呼び出す可能性が最も高いです。 – Paolo

+0

@ Paulw11私は、自動サイズ変更/不足している制約の追加/自分の制約の設定を試みました。また、制約に関する警告も出ません。今でも、イメージは自動レイアウト上にあり、警告/問題はありません。 –

答えて

2

私はあなたがviewDidAppearでそれを呼び出す必要がありますviewWillAppear

これを呼び出しています、それは簡単なことです。

これは古典的な "つかまり"です!

PaulW11はすでに答えを出しました。私はここにgooglerを助けるためにここに入れています。 viewWillAppearで


は、明らかに十分なビューがはまだが現れていないが、それはなります。

ビューDidAppearでは、ビューは実際には文字通りと表示されています。それは、絶対に、間違いなく、すべてが画面上にあり、もちろん、完全にレイアウトされていることを意味します。ルールとして

あなたは趣味のiOSプログラマなら、単に「原則」としてしかviewDidAppearを使用しています。

これは99%のケースにおける「日常的な解決策」です。

viewWillAppear、viewDidLayoutSubviews、およびviewDidLoadは、プロフェッショナル向けのものです。 viewDidAppearを使用すると、パフォーマンスの影響など、最も微妙な無関係なもの以外の「悪いことは起こりません。ですから、非常に単純に、常にviewDidAppearを使用してください。

viewDidLayoutSubviewsなどの微妙な違いについては、実際にはバージョンごとに若干異なるばかりで、autolayoutなどの具体的な秘密の詳細があります。このQAの範囲を超えています。

私はほとんどのAppleが「一般公開」にviewDidLayoutSubviewsとviewWillAppearとviewDidLoadを顕著に公開すべきではないと言います。例えば、初心者や趣味のプログラマーなら、CALayerのようなものを使うか、タッチを渡したり、自分のジェスチャーを作成したり、トランジションアニメーションを操作したりする必要は全くありません。

同様に、実際には、viewDidLayoutSubviewsまたはviewWillAppearまたはviewDidLoadを常に使用する必要はありません。単に "viewDidAppear"を使用してください(あなたがそれを必要とする場合はほとんどありません)、あなたはすべて設定されています。

いつもどこでも使用しているはずのコンテナビュー(コンテナビューの場合はepic tutorialです)を使用すると、この種のUIレーストラックの問題が起きることはほとんどありません。

+0

'viewDidAppear'と' viewWillAppear'と 'viewDidLayoutSubviews'では、このケースでどう違いますか? –

+0

こんにちは、私はあなたの質問に答えました@AakashDave。何らかの理由でそれについて詳しく知りたいのであれば、膨大な量の記事や技術的なAppleの講演などがあります – Fattie

関連する問題