ClipToBounds hoạt động như thế nào?


110

Tôi muốn biết cách sử dụng UIViewtài sản clipsToBounds.

Tài liệu chính thức cho biết như sau:

clipsToBounds bất động sản

Giá trị Boolean xác định xem các lượt xem phụ có bị giới hạn trong giới hạn của lượt xem hay không.

Thảo luận
Đặt giá trị này để YESlàm cho các lượt xem phụ bị cắt vào giới hạn của người nhận. Nếu được đặt thành NO, các lượt xem phụ có khung hình vượt ra ngoài giới hạn có thể nhìn thấy của người nhận sẽ không bị cắt bớt. Giá trị mặc định là NO.

Nhưng tôi không rõ điều này có nghĩa chính xác là gì. Tôi nên sử dụng clipsToBoundsnhư thế nào? Chính xác thì hậu quả của việc đặt thuộc tính này YESlà gì? Hay để NO?

Câu trả lời:


283

Nếu chế độ xem siêu cấp của tôi là một hộp có kích thước 10 đơn vị mỗi bên và chế độ xem phụ của tôi rộng 20 đơn vị, clipsToBoundsđược đặt thành YES, tôi sẽ chỉ thấy phần chế độ xem phụ phù hợp với giới hạn của chế độ xem siêu tốc. Ngược lại, nếu clipsToBoundsđược đặt thành NO, tôi sẽ thấy toàn bộ chế độ xem phụ, thậm chí cả các phần bên ngoài chế độ xem siêu cao (giả sử chúng ta vẫn đang ở trên màn hình).

Để làm ví dụ trực quan, hãy xem xét các chế độ xem sau được thiết lập trên bảng phân cảnh:

nhập mô tả hình ảnh ở đây

Đây là một màu trắng UIView, một nhãn ở góc trên cùng bên trái với đơn giản là "1" hoặc "2" để tôi có thể thảo luận về chúng là view1hoặc view2. Ngoài ra, chế độ xem màu đen có cùng kích thước với chế độ xem màu trắng, nhưng điểm gốc của nó là ở tâm của chế độ xem màu trắng.

Trong viewDidLoadphương thức của bộ điều khiển chế độ xem , chúng ta có đoạn mã sau:

Mục tiêu-C:

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

Nhanh:

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

Khi chúng tôi chạy mã và xem xét trong trình mô phỏng hoặc trên thiết bị, chúng tôi nhận được kết quả sau:

nhập mô tả hình ảnh ở đây

Vì vậy, mặc dù các khung nhìn này được thiết lập giống nhau (ngoại trừ clipsToBounds), chúng trông khác nhau. Đây là những gì clipsToBoundshiện. Đặt nó thành YESsẽ cung cấp kết quả trên cùng, trong khi đặt nó để NOcung cấp kết quả dưới cùng.

Nếu chúng tôi gỡ lỗi hệ thống phân cấp chế độ xem, chúng ta có thể thấy rõ ràng hơn rằng cả hai hộp đen đều thực sự mở rộng qua người nội trú của chế độ xem màu trắng, nhưng chỉ chế độ xem 2 hiển thị điều này khi ứng dụng thực sự đang chạy:

nhập mô tả hình ảnh ở đây


3
Câu trả lời tuyệt vời! Làm tốt. Nhưng tôi có một câu hỏi. Tại sao UITextViewbóng không nhìn thấy được, nếu thuộc clipsToBoundstính bằng true; ? Nếu có false, hoạt động tốt
Mannopson

1
Lưu ý: Đó là chế độ xem cha mẹ mà bạn thay đổi clipsToBounds trên. Vì vậy, nếu viewB là một subview của viewA. Đó là quan điểm rằng clipsToBounds cần phải được biến thành sự thật.
thẩm mỹLabs

Chế độ xem nào hiển thị từ khung xem ban đầu trên chế độ xem đó là cử chỉ chạm hoạt động, vì tôi đã kiểm tra và nó không hoạt động.
Pravin Tate

2

Đây có nghĩa là một câu trả lời nhanh ngắn gọn so với câu trả lời được chấp nhận

Nếu Apple là để đổi tên khách sạn này, tôi muốn đặt tên cho nó: clipSubviewsToBounds.

Tôi vừa gặp lỗi trong mã của chúng tôi. Nơi chiều cao của chế độ xem gốc đã được đặt thành 0. Chúng tôi dự kiến ​​sẽ không thấy yếu tố nào của nó. Tuy nhiên, nội dung của chế độ xem phụ huynh đã hiển thị.

Đó là vì clipToBoundskhông được đặt thành true. Khi đã được đặt thành truethì chiều cao của lượt xem phụ không thể vượt ra ngoài 0, vì vậy chúng hoàn toàn không hiển thị.


Câu trả lời này được đánh giá thấp
sasquatch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.