1. ホーム
  2. ios

[解決済み] clipsToBoundsはどのように動作しますか?

2022-09-09 19:56:53

質問

の使い方を知りたいです。 UIView プロパティ clipsToBounds .

公式ドキュメントには以下のように書かれています。

clipsToBounds プロパティ

サブビューがビューの境界に制限されるかどうかを決定するブール値です。 を決定するブール値です。

ディスカッション

この値を YES を設定すると、サブビューが受信機の境界に切り取られます。 に切り取られます。設定された場合 NO に設定されている場合、フレームが受信機の可視範囲を超えているサブビューは を設定すると、フレームが受信機の可視領域からはみ出したサブビューは切り取られません。デフォルトの の値は NO .

しかし、これが具体的に何を意味するのかが不明です。 どのように clipsToBounds ? このプロパティを YES に設定するとどうなりますか?あるいは NO ?

どのように解決するのですか?

スーパービューが一辺が 10 単位のボックスで、サブビューが 20 単位の幅であり、その中に clipsToBounds に設定します。 YES に設定されている場合、サブビューのうちスーパービューの境界内に収まる部分しか表示されませんね。 そうでなければ、もし clipsToBounds が設定されている場合は NO にすると、サブビュー全体、スーパービューの外側の部分まで見えるようになります(まだ画面上にいると仮定して)。

視覚的な例として、ストーリーボードに設定された次のようなビューを考えてみましょう。

これは、白の UIView として議論できるように、左上にシンプルな "1" または "2" と書かれたラベルを付けています。 view1 または view2 . さらに、黒いビューは白いビューと同じ大きさですが、その原点は白いビューの中心にあります。

ビューコントローラの viewDidLoad メソッドに、次のようなコードを記述しています。

Objective-Cです。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view1.clipsToBounds = YES;
    self.view2.clipsToBounds = NO;
}

スウィフト

override func viewDidLoad() {
    super.viewDidLoad()
    self.view1.clipsToBounds = true
    self.view2.clipsToBounds = false
}

このコードを実行して、シミュレータや端末で見ると、次のような結果が得られます。

したがって、これらのビューは同じように設定されているにもかかわらず ( clipsToBounds を除いて)、異なるように見えます。 これは clipsToBounds がすることです。 これを設定することで YES に設定すると一番上の結果を提供し、一方 NO に設定すると一番下の結果を提供します。

ビュー階層をデバッグすると、黒いボックスが両方とも白いビューの境界を越えて実際に広がっていることがより明確にわかりますが、アプリが実際に実行されているときにこれを示すのはビュー 2 だけです。