Thuộc tính UIScrollView contentInset dùng để làm gì?


158

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:


240

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.


được sử dụng để thêm phần đệm vào UIScrollView rồi chứ? Nếu không bạn có thể cho tôi một ví dụ thực tế. Vấn đề của tôi không phải là làm thế nào để thực hiện nó mà là khi nào thực hiện nó.
ForeignerBR

28
Có, nó đệm nội dung ở bên trong của chế độ xem cuộn. Nó gần giống với thuộc tính CSS padding.
Marc W

Xin lỗi để cõng về điều này, tôi có thể chuyển câu hỏi của riêng mình, nhưng dựa trên điều này, điều gì thực sự xảy ra nếu bạn đặt từng giá trị contentInset thành 0 khác với contentHeight chẳng hạn? Điều đó có buộc toàn bộ scrollview phải là chiều cao bạn đặt không?
jakev

@jakev Không, thuộc tính .frame kiểm soát kích thước của scrollview trong phần gốc của nó (Xem câu trả lời này: stackoverflow.com/questions/5361369/ Lỗi ). Đặt contentInsets thành 0 cho tất cả các mặt đơn giản có nghĩa là nội dung sẽ không được đệm ở tất cả trong cuộn xem. Vì vậy, khi bạn cuộn lên trên cùng, nội dung sẽ nằm ngay trên đỉnh của cuộn xem. Nếu bạn cuộn xuống dưới cùng, nội dung sẽ chuyển sang bên phải của cuộn xem.
Jeremy Wiebe

có thể giữ nội dung Luôn luôn ngay cả khi cuộn luôn giữ marin lên đầu (contenInset) của scrollView
Chlebta

86

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.


Điều thú vị ở đây là bạn có thể sử dụng các bộ chèn để tạo hiệu ứng "cuộn dưới thanh trạng thái với hiệu ứng nhòe".
TheEye

Ví dụ về ứng dụng ảnh rất dễ hiểu.
abhimuralidharan

8

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.


4

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:

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

Sau đó đặt contentInset:

tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)

Hiệu quả như sau:

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

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.


2

Câu hỏi tuyệt vời.

Hãy xem xét ví dụ sau ( scrollerlà 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.

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.