7

制御しているビューまたはサブビューの実際のサイズを取得するにはどうすればよいですか? 例えば:

UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(0,0,200,100)];
[self addSubview:firstView];

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 20, 230, 120)];
[firstView addSubview:button];

ご覧のとおり、buttonオブジェクトが追加先のビューのサイズを超えています。

これで(サブビューとして追加されるオブジェクトがたくさんあると仮定して)、実際の幅と高さをどのように決定できfirstViewますか?

4

3 に答える 3

4

ボタンの幅と高さを firstView と同じにしたい場合は、UIView の bounds プロパティを次のように使用する必要があります。

UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(0,0,200,100)];
[self addSubview:firstView];

UIButton *button = [[UIButton alloc] initWithFrame:firstView.bounds];
[firstView addSubview:button];

firstView の幅/高さを取得するには、次のようにします。

CGSize size = firstView.bounds.size;
NSInteger width = size.width;
NSInteger height = size.height;
于 2013-02-13T13:09:14.650 に答える
0

最初のビューは実際には 200 x 100 です。ただし、使用しない限り、内部のビューは切り取られませんclipsToBounds

問題の望ましい解決策は、必要に応じて、サイズを超えるビューの追加を停止するか、使用可能なスペースをオーバーフローするようにビューのサイズ変更を停止することです。

(階層内のすべてのサブビューを含む完全な境界を実際に計算することは難しくありません。実際にはどこにも到達しない多くの作業です。UIViewたまたま、ビューをコンテナーよりも大きくすることができますが、必ずしも何も与えられません。正しく動作することを保証し、悪用するとバグの原因となる可能性があります. その理由clipsToBoundsはおそらく、クリッピングは高価ですが、アニメーション中にサブビューが効果のために一時的に範囲外に移動される可能性があるためです.ビューから削除されます。)

于 2013-02-13T13:09:35.677 に答える
0

firstview.frame.size.width firstview.frame.size.height

于 2013-02-13T13:11:05.727 に答える