Ai đó có thể giải thích cho tôi thuộc tính contentInset UIScrollView
được sử dụng để làm gì không? Và có thể cung cấp một ví dụ?
Ai đó có thể giải thích cho tôi thuộc tính contentInset UIScrollView
được sử dụng để làm gì không? Và có thể cung cấp một ví dụ?
Câu trả lời:
Nó đặt khoảng cách của hình nhỏ giữa chế độ xem nội dung và chế độ xem cuộn kèm theo.
Obj-C
aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);
Swift 5.0
aScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 7.0)
Đây là một bài viết Thư viện tham khảo iOS tốt về chế độ xem cuộn có ảnh chụp màn hình thông tin (hình 1-3) - Tôi sẽ sao chép nó qua văn bản tại đây:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
(cH = contentSize.height; cW = contentSize.width)
Chế độ xem cuộn bao quanh chế độ xem nội dung cộng với bất kỳ phần đệm nào được cung cấp bởi các phần nội dung được chỉ định.
padding
.
Mặc dù câu trả lời của jball là một mô tả tuyệt vời về nội dung, nhưng nó không trả lời câu hỏi khi nào nên sử dụng nó. Tôi sẽ mượn từ sơ đồ của anh ấy:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
|content|
-------------↑-
Đó là những gì bạn nhận được khi bạn làm điều đó, nhưng tính hữu ích của nó chỉ hiển thị khi bạn cuộn:
_|←_cW_→_|_↓_
|content| ← content is still visible
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
Hàng nội dung trên cùng sẽ vẫn hiển thị vì nó vẫn nằm trong khung của chế độ xem cuộn. Một cách để nghĩ về phần bù trên cùng là "bao nhiêu để chuyển nội dung xuống chế độ xem cuộn khi chúng tôi cuộn toàn bộ lên trên cùng"
Để xem một nơi thực sự được sử dụng, hãy xem ứng dụng Ảnh tích hợp trên iphone. Thanh điều hướng và thanh trạng thái trong suốt và nội dung của chế độ xem cuộn được hiển thị bên dưới. Đó là bởi vì khung của chế độ xem cuộn kéo dài ra xa. Nhưng nếu nó không dành cho phần nội dung, bạn sẽ không bao giờ có thể có phần trên cùng của nội dung rõ ràng là thanh điều hướng trong suốt khi bạn đi đến đỉnh.
Các phần tử nội dung giải quyết vấn đề có nội dung nằm bên dưới các phần khác của Giao diện người dùng mà vẫn có thể truy cập được bằng các thanh cuộn. Nói cách khác, mục đích của Inset nội dung là làm cho khu vực tương tác nhỏ hơn khu vực thực tế của nó.
Hãy xem xét trường hợp chúng ta có ba vùng logic của màn hình:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
và chúng tôi muốn văn bản không bao giờ xuất hiện trong suốt bên dưới NÚT HÀNG ĐẦU, nhưng chúng tôi muốn Văn bản xuất hiện bên dưới BOTTOM TAB BAR và vẫn cho phép cuộn để chúng tôi có thể cập nhật văn bản ngồi trong suốt bên dưới BOTTOM TAB BAR.
Sau đó, chúng tôi sẽ đặt nguồn gốc hàng đầu ở dưới các NÚT HÀNG ĐẦU và chiều cao để bao gồm phần dưới của BOTTOM TAB BAR. Để có quyền truy cập vào Văn bản nằm bên dưới nội dung BOTTOM TAB BAR, chúng tôi sẽ đặt phần dưới cùng là chiều cao của BOTTOM TAB BAR.
Nếu không có nội dung, trình điều khiển sẽ không cho phép bạn cuộn nội dung đủ để nhập vào nội dung đó. Với hình nhỏ, như thể nội dung có thêm "NỘI DUNG BLANK" kích thước của phần nội dung. Văn bản trống đã được "chèn" vào "nội dung" thực sự - đó là cách tôi nhớ khái niệm này.
Nó được sử dụng để thêm phần đệm vào UIScrollView
Không contentInset
, chế độ xem bảng là như thế này:
Sau đó đặt contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
Hiệu quả như sau:
Có vẻ là tốt hơn, phải không?
Và tôi viết một blog để nghiên cứu contentInset
, những lời chỉ trích được chào đón.
Câu hỏi tuyệt vời.
Hãy xem xét ví dụ sau ( scroller
là một UIScrollView):
float offset = 1000;
[super viewDidLoad];
for (int i=0;i<500; i++) {
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(i * 100, 50, 95, 100)] autorelease];
[label setText:[NSString stringWithFormat:@"label %d",i]];
[self.scroller addSubview:label];
[self.scroller setContentSize:CGSizeMake(self.view.frame.size.width * 2 + offset, 0)];
[self.scroller setContentInset:UIEdgeInsetsMake(0, -offset, 0, 0)];
}
Các miếng lót là cách DUY NHẤT để buộc thanh cuộn của bạn có "cửa sổ" trên nội dung mà bạn muốn. Tôi vẫn đang rối tung với mã mẫu này, nhưng ý tưởng là có: sử dụng các phần trong để lấy "cửa sổ" trên của bạn UIScrollView
.