Bắt đầu từ iOS7, các bộ điều khiển xem sử dụng bố cục toàn màn hình theo mặc định. Đồng thời, bạn có nhiều quyền kiểm soát hơn về cách nó đưa ra các quan điểm của mình và điều đó được thực hiện với các thuộc tính đó:
edgeForExtendsLayout
Về cơ bản, với thuộc tính này, bạn đặt các mặt của chế độ xem của mình có thể được mở rộng để bao phủ toàn bộ màn hình. Hãy tưởng tượng rằng bạn đẩy a UIViewController
vào UINavigationController
. Khi chế độ xem của bộ điều khiển chế độ xem đó được đặt, nó sẽ bắt đầu khi thanh điều hướng kết thúc, nhưng thuộc tính này sẽ đặt các cạnh của chế độ xem (trên, trái, dưới, phải) có thể được mở rộng để lấp đầy toàn bộ màn hình.
Hãy xem nó với một ví dụ:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Ở đây bạn không đặt giá trị của edgesForExtendedLayout
, do đó, giá trị mặc định được lấy ( UIRectEdgeAll
), vì vậy chế độ xem mở rộng bố cục của nó để lấp đầy toàn bộ màn hình.
Đây là kết quả:
Như bạn có thể thấy, nền đỏ kéo dài phía sau thanh điều hướng và thanh trạng thái.
Bây giờ, bạn sẽ đặt giá trị đó thành UIRectEdgeNone
, vì vậy bạn đang nói với bộ điều khiển chế độ xem không mở rộng chế độ xem để che màn hình:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Và kết quả:
tự độngAdjustScrollViewInsets
Thuộc tính này được sử dụng khi chế độ xem của bạn là UIScrollView
hoặc tương tự, như a UITableView
. Bạn muốn bảng của bạn bắt đầu khi thanh điều hướng kết thúc, bởi vì bạn sẽ không nhìn thấy toàn bộ nội dung nếu không, nhưng đồng thời bạn muốn bảng của bạn bao phủ toàn bộ màn hình khi cuộn. Trong trường hợp đó, cài đặt edgesForExtendedLayout
thành Không sẽ không hoạt động vì bảng của bạn sẽ bắt đầu cuộn khi thanh điều hướng kết thúc và nó sẽ không đi phía sau nó.
Đây là nơi mà thuộc tính này có ích, nếu bạn để bộ điều khiển xem tự động điều chỉnh các phần tử (đặt thuộc tính này thành CÓ, cũng là giá trị mặc định), nó sẽ thêm các phần tử vào đầu bảng, do đó bảng sẽ bắt đầu nơi điều hướng thanh kết thúc, nhưng cuộn sẽ bao phủ toàn bộ màn hình.
Đây là khi được đặt thành NO:
Và CÓ (theo mặc định):
Trong cả hai trường hợp, bảng cuộn phía sau thanh điều hướng, nhưng trong trường hợp thứ hai (CÓ), nó sẽ bắt đầu từ bên dưới thanh điều hướng.
ExtendedLayoutIncludesOpaqueBars
Giá trị này chỉ là một bổ sung cho những cái trước đó. Theo mặc định, tham số này được đặt thành NO. Nếu thanh trạng thái mờ đục, các chế độ xem sẽ không được mở rộng để bao gồm thanh trạng thái, ngay cả khi bạn mở rộng chế độ xem của mình để che nó ( edgesForExtendedLayout
sang UIRectEdgeAll
).
Nếu bạn đặt giá trị thành CÓ, điều này sẽ cho phép chế độ xem bên dưới thanh trạng thái một lần nữa.
Nếu có gì đó không rõ ràng, hãy viết bình luận và tôi sẽ trả lời nó.
Làm thế nào để iOS biết UIScrollView sẽ sử dụng cái gì?
iOS lấy lượt xem đầu tiên trong chế độ xem của ViewContoder, khung nhìn ở chỉ số 0 và nếu đó là lớp con của UIScrollView
thì áp dụng các thuộc tính được giải thích cho nó.
Tất nhiên, điều này có nghĩa là UITableViewController
hoạt động theo mặc định (vì đây UITableView
là chế độ xem đầu tiên).