ClipsToBounds nasıl çalışır?


110

UIViewMülkün nasıl kullanılacağını bilmek istiyorum clipsToBounds.

Resmi belgeler şunları söylüyor:

clipsToBounds Emlak

Alt görünümlerin görünümün sınırlarıyla sınırlandırılıp sınırlandırılmadığını belirleyen bir Boolean değeri.

Tartışma
Bu değeri, alt YESgörünümlerin alıcının sınırlarına göre kırpılmasına neden olur. Olarak ayarlanırsa NO, kareleri alıcının görünür sınırlarının ötesine uzanan alt görünümler kırpılmaz. Varsayılan değer NO.

Ama bunun tam olarak ne anlama geldiğinden emin değilim. Nasıl kullanmalıyım clipsToBounds? Bu özelliği YEStam olarak ayarlamanın sonuçları nelerdir ? Veya için NO?

Yanıtlar:


283

Gözetimim her iki tarafta 10 birim ölçen bir kutuysa ve alt görünümüm 20 birim genişliğindeyse, olarak clipsToBoundsayarlandığında YES, alt görüntünün yalnızca denetimin sınırları dahiline uyan kısmını göreceğim. Aksi takdirde, clipsToBoundsolarak ayarlanırsa NO, tüm alt görünümü, hatta süpervizörün dışındaki kısımları bile göreceğim (hala ekranda olduğumuzu varsayarsak).

Görsel bir örnek olarak, film şeridinde belirlenen aşağıdaki görünümleri düşünün:

görüntü açıklamasını buraya girin

Bu bir beyaz UIView, sol üst köşede basit bir "1" veya "2" yazan bir etiket, böylece bunları view1veya olarak tartışabilirim view2. Ek olarak, siyah görünüm beyaz görünümle aynı boyuttadır, ancak başlangıç ​​noktası beyaz görünümün merkezindedir.

View controller'ın viewDidLoadmetodunda aşağıdaki koda sahibiz:

Objective-C:

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

Swift:

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

Kodu çalıştırıp simülatörde veya cihaza baktığımızda şu sonuçları alıyoruz:

görüntü açıklamasını buraya girin

Dolayısıyla, bu görüşler aynı (dışında clipsToBounds) kurulmasına rağmen , farklı görünüyorlar. Bu ne clipsToBoundsyapar. Olarak ayarlamak YESen iyi sonucu sağlarken NO, en alttaki sonucu sağlar.

Görünüm hiyerarşisinde hata ayıklayacak olursak, kara kutuların her ikisinin de aslında beyaz görünümün sınırlarını aştığını daha net görebiliriz, ancak yalnızca görünüm 2 bunu uygulama gerçekten çalışırken gösterir:

görüntü açıklamasını buraya girin


3
Harika cevap! Aferin. Ama bir sorum var. Mülk eşitse neden UITextViewgölgeler görünmez ; ? Eğer öyleyse , gayet iyi çalışıyorclipsToBoundstruefalse
Mannopson

1
Not: ClipsToBounds'u değiştirdiğiniz ana görünümdür. Öyleyse, görünümB, görünüm A'nın bir alt görünümü ise. ClipsToBounds'un gerçekleştirilmesi gereken viewA'dır.
aestusLabs

Bu görünümdeki orijinal görünüm çerçevesinden hangi görünümün gösterdiği dokunma hareketi çalışıyor çünkü kontrol ediyorum ve çalışmıyor.
Pravin Tate

2

Bu, kabul edilen cevap yerine kısa ve öz bir hızlı cevap olması amaçlanmıştır.

Apple bu özelliği adlandırmak olsaydı, ben bunun adı ediyorum: clipSubviewsToBounds.

Kodumuzda bir hatayla karşılaştım. Üst görünümün yüksekliğinin ayarlandığı yer 0. Öğelerinin hiçbirini görmemeyi umuyorduk. Yine de ebeveyn görüşünün içeriği görünüyordu.

Çünkü edildi clipToBoundsiçin gelmemişti true. Bu bir kez ayarlandıktan truesonra, alt görünümlerin yükseklikleri ötesine geçemez 0, bu nedenle hiç gösterilmezler.


Bu cevap küçümseniyor
sasquatch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.