3

フレームをアイテム数に合わせてサイズ変更するためにフレームを動的に設定するUITableViewがあります。私はこれを行っているので、電話の上部からドラッグしてテーブルビューを「スライド」させることができます。UITableViewは、ビューのペン先内で定義されます。

このスライディングUITableViewを含むビューが消えるたびに(viewDidDisappearが呼び出されるように)、UITableViewのフレームはnibの値(静的フッターのサイズである44に設定)にリセットされます。

私の質問は2つの部分です:

  1. フレームがリセットされるのはなぜですか?また、フレームをリセットするメカニズムは何ですか?
  2. フレームがnib値にリセットされるたびに、フレームを希望のサイズに設定できるようにするにはどうすればよいですか?

背景として、私はすべてのもっともらしいビューライフサイクルメソッドを使い果たしました。

興味深いことに、ViewDidAppearでフレームを設定しようとしました。これは、「バグ」の再現でヒットし、フレームを検証しました。ピンが落ちた場合でも、メソッドの最後で高さが望ましい値になります。最後に、フレームの高さはまだ44です。tableViewIBOutletは、実際にビューにロードされているものではありませんか?

    public override void ViewDidAppear (bool animated)
    {
        RetractMemoryTableAnimation(0);

        // Frame is correct after this line (Height > 44)
        // But the Frame in my view persists to a height of 44
        this.tableView.Frame = new RectangleF(this.tableView.Frame.Location.X, this.tableView.Frame.Location.Y,
                                              this.tableView.Frame.Size.Width, this.CalculatedTableViewHeightWithFooter);
    }
4

1 に答える 1

4

When writing custom code to set a UIView's frame, always make sure to set AutoresizingMask to UIAutoresizingMask.None if the view seems to be getting auto-resized.

于 2013-01-30T20:22:20.600 に答える