質問

いカスタムビューが少なくなってきている layoutSubview メッセージ中のアニメーション

私はこのところの埋の画面になります。このカスタムsubview下の画面が正しいサイズのインターフェイスをビルダーを変更した場合、購入したの高さnavバーがあります。 layoutSubviews された際に呼び出されるビューを作成しません。私subviewsが正しく登録されてい願いすることがあります。ま切り替えのコステータスバーのsubviewの layoutSubviews 呼び出されることはありませんので、でも、メインビューはアニメーションがそのサイズ変更.

はどのような場合 layoutSubviews って呼ぶの?

していま autoresizesSubviews 設定 NO 自分のカスタムビュー。とのインターフェイスをビルダーの上下支柱や垂直矢印のセットです。


他のパズルのようなものである窓のなければなキー:

[window makeKeyAndVisible];

の他のsubviewsは自動的にリサイズされます。-

役に立ちましたか?

解決 5

私はばねがシミュレートされた画面要素は、(ステータスバーなど)になっているビューに変更することができないことインタフェースビルダーの主張まで溶液を追跡しました。バネがメインビューのオフだったので、そのビューは、インコールバーが表示された際にその全体をスクロールダウンし、従ってサイズを変更しませんでした。

ビューのサイズを変更すると、正しくスプリングを設定し、その後、シミュレートされた機能をオフにすると、アニメーションが発生する原因と私の方法が呼び出される。

これをデバッグするに余分な問題は、通話中の状態はメニューから切り替えられたときに、シミュレータアプリを終了していることです。アプリ=なしデバッガを終了します。

他のヒント

また同様の質問ですが、なには満足して回答者かに純ったので実際、ここには何か:

  • init しない layoutSubviews へ を呼び出す(duh)
  • addSubview: 原因 layoutSubviews と呼ばれるように ビューに追加され、そのた 追加標示は、すべての subviewsの目標
  • 眺望 setFrame ト電話 layoutSubviews 月 の有するフレームセットのみ そうすれば、パラメータのフレーム 異なる
  • スクロールUIScrollView 原因 layoutSubviews に対して呼び出される のscrollView、superview
  • 回転機器のみ通話 layoutSubview の親ビューに 対応viewControllers主 ビュー)
  • リサイズの見通 layoutSubviews そのsuperview

私の結果- http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/

ビルの前に答えるには以下のようにBadPirate、実験、さらなるビットおよび来の明確化/訂正に関するお知らせ"を参照。これらの layoutSubviews: 呼び出される事を示しば:

  • 独自の 境界 (枠)に変更します。
  • 境界のクレジットカードでのsubviewsを変更します。
  • A subviewのビューは削除される方は受付にお申し出ください

その他にも関連する詳細:

  • 境界と変更した場合にのみ、新たな価値が異なるため、 を含む異なる起源.注具体的にはその layoutSubviews: するときにUIScrollView巻などを行い、スクロールを変え、その境界'です。
  • を変更するフレームのみの変更の範囲外の場合はサイズを変更し、このことを伝播の境界の物件です。
  • 変化の範囲のビューについては、ビュー階層までの呼び出し layoutSubviews: 時には最終的に追加され、ビュー階層.
  • 終わってしまうため完全性:これらのトリガをしない 直接 コlayoutSubviewsも setNeedsLayout, を設定する/上げます。繰り返し処理毎に実行ループは、ることができます。 は、ビュー階層, このフラグをチェックします。各ビューのフラグが見つかり、 layoutSubviews: 呼び出したときに、このフラグがセットされます。景色以上に階層チェック/う。

<のhref = "https://developer.apple.com/library/prerelease/tvos/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5- SW1" のrel = "noreferrer"> https://developer.apple.com/library/prerelease/tvos/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5- SW1する

  次のいずれかのイベントが発生したときに

レイアウトの変更が発生する可能性があります   ビューでます:

     

A。ビューの境界矩形の大きさが変わる。
  B。インターフェイスの向きの変更は、通常、ルートビューの境界矩形の変化をトリガする、発生します。
  C。 Core Animationのサブ層のセットは、ビューのレイヤの変更に関連付けられているとレイアウトが必要です。
  D。アプリケーション軍のレイアウトは、ビューのsetNeedsLayoutまたはlayoutIfNeededメソッドを呼び出すことによって発生します。
  電子。ビューの下地層オブジェクトのsetNeedsLayoutメソッドを呼び出すことにより、アプリケーションを強制的にレイアウトます。

一部のポイント BadPirateの回答 ているということになりますtrue:

  1. のための addSubView

    addSubview 原因layoutSubviewsに対して呼び出されるの追加、ビューが追加される(目標)は、すべてのsubviewsの目標です。

    によってビューの対象view)autoresizeマスクです。場合にはautoresizeマスク、layoutSubview呼ばれる各 addSubview.存在しない場合autoresizeマスクをlayoutSubview呼び出される場合のみ、対象ビュー)フレームサイズ変わります。

    例:作成した場合UIViewプログラムではautoresizeマスクによるデフォルト)、LayoutSubviewする場合は呼び出されUIViewフレームに変更しない毎 addSubview.

    この技術の性能の応用も増加します。

  2. のためのデバイスの回転点

    回転機器のみ通話layoutSubviewの親ビューに対応viewControllerの主要ビュー)

    ことができた場合にだけtrueをおVCのVC階層構造のルートで window.rootViewControllerがる、ここが最も多い。IOS5の機能を利用した場合VCではないものを追加者別VC、このVCなければならないずっき装置の回転が行えます。そのため、眺望が得られない呼び出しlayoutSubviews.

を呼び出します [self.view setNeedsLayout]; ViewControllerで、それはviewDidLayoutSubviews

を呼び出すことが可能

あなたはlayoutIfNeeded見てきました!

ドキュメントスニペットは以下の通りです。あなたがアニメーション中に明示的にこのメソッドを呼び出した場合、アニメーションの仕事をしていますか?

layoutIfNeeded 必要に応じてサブビューを配置します。

- (void)layoutIfNeeded

ディスカッション 描画する前にサブビューのレイアウトを強制するために、このメソッドを使用します。

可用性 iPhone OS 2.0以降ます。

で利用可能
4 SDK 3からOpenGLのアプリケーションを移行する場合は、

、layoutSubviewsはもはや呼び出されませんでした。試行錯誤の多くの後、私は最終的に、MainWindow.xibを開いたWindowオブジェクトを選択し、インスペクタウィンドウのタブ(一番左)の属性と、「起動時に目に見える」にチェックを選びました。 SDK 3で、それはまだ4でlayoutSubViewsコールを引き起こすために使用されるが、ではないと思われます。

欲求不満の6時間は、最後に入れます。

layoutSubviewsが呼ばれることは決してありません、むしろ曖昧な、まだ潜在的に重要な場合は、次のとおりです。

import UIKit

class View: UIView {

    override class var layerClass: AnyClass { return Layer.self }

    class Layer: CALayer {
        override func layoutSublayers() {
            // if we don't call super.layoutSublayers()...
            print(type(of: self), #function)
        }
    }

    override func layoutSubviews() {
        // ... this method never gets called by the OS!
        print(type(of: self), #function)
    }
}

let view = View(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top