17

カスタムが親UIViewのコンテナ内でレンダリングされないのはなぜですか? UIViewだから私が持っているものは次のとおりです:

  • MainViewController - UIView" customViewContainer" (画面全体を占有しない) を持ち、
  • CustomView - UIViewXIB ファイルを使用しUIViewます。(AspectFit を使用して) レンダリングすると、親 " customViewContainer"の境界外でレンダリングされます。

カスタム ビューのセットアップに使用されるコードは、MainViewController から抽出した次のコードです。

<< カット - 以下の Update2 を参照 >>

CustomViewだから、ビューが親よりも大きな領域でレンダリングされている理由がわかりませんcustomViewContainerか? 私が望むのは、型アプローチごとに完全customviewに親 " " に収まるようにすることです。customViewContainerAspectFit

ありがとう

EDIT 1(明確化を追加)-親ビューで「サブビューをクリップ」すると、クリップされますが、親ビュー領域(画面全体ではなく)内にカスタムビューをレンダリングするために本当に必要なもの。したがって、(a) カスタム ビューの中心を親ビューの中心に配置し、(b) カスタム ビューを親ビューに適切に AspectFit する必要があります。何か案は?

編集 2 - 更新

申し訳ありません-元の質問のコードでコピー/貼り付けの間違いを犯しました-編集できないようですので、以下に正しいバージョンを入れます-明確にするために:

MainViewController- UIView" containerView" (画面全体を占有しない) を持ち、CustomView- UIViewXIB ファイルを含む - ( を使用して) レンダリングされると、親 " "の境界外でレンダリングされるのはUIViewここですAspectFitcontainerView

以下のコードで、これは今意味がありますか? このコードの理由は、カスタム がありUIViewますが、それに関連付けられた XIB ファイルがあるため、MainControllerビューを使用できるようにする唯一の方法でした。つまり、 にコンテナ ビューを用意しMainController view、プログラムで をコンテナ ビューに追加しCustomViewます。

「追加するビューのフレームまたは中心を希望どおりに設定してください」について - CustomView のサイズをプログラムまたは手動で設定する必要があると言っていますか (関連して)親のcontainerView)?

私が望んでいたのは、宣言的なレイアウト設定を使用して、「XIBファイルからカスタムビューをロードし、このビューをself.containerViewにアスペクトフィットする」と言う方法があることでしたが、疑問に思い始めていますこれが可能であれば?

以下の更新コード(コピー/貼り付けして変数名などを変更したときに、元の質問に誤りがありました)

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Load the custom Altimeter View into this UIControllerView's container UIView for it
    NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"Customview" owner:self options:nil];
    for (NSObject *obj in nibs) {
        if ( [obj isKindOfClass:[Customview class]]) {
            Customview *cv = (Customview*)obj;
            [self.containerView addSubview:cv];
            break;
        }
    }
    // UI Layout
    self.containerView.layer.borderWidth = 2;
    self.containerView.layer.borderColor = [[UIColor redColor] CGColor];
}
4

1 に答える 1

24

IB ファイルの親の「Clip subviews」プロパティがチェックされているかどうかを確認します。

サブビューのクリップ

同等のコードはself.view.clipsToBounds = YES.

これがNOの場合、外側に描画されるサブビューは、親に描画されているかのように表示されます。

于 2011-07-16T05:30:16.830 に答える