[Video Summary] Ch. 4.5 Detect Device Rotation & Reflow + Center a LazyVGrid in SwiftUI DungeonDice app
Mô tả nhanh
Video này hướng dẫn cách căn giữa hàng cuối cùng trong LazyVGrid của SwiftUI, một tính năng không có sẵn mặc định. Đồng thời, video cũng trình bày cách phát hiện và phản hồi khi thiết bị xoay màn hình, cũng như cách sử dụng các phương thức dropLast và suffix, cùng với GeometryReader.
Video
Mô tả chi tiết
Video này hướng dẫn cách căn giữa hàng cuối cùng trong LazyVGrid của SwiftUI, một tính năng không có sẵn mặc định. Đồng thời, video cũng trình bày cách phát hiện và phản hồi khi thiết bị xoay màn hình, cũng như cách sử dụng các phương thức dropLast và suffix, cùng với GeometryReader.
Các bước thực hiện chính bao gồm:
- Tính toán số lượng item trên mỗi hàng:
- Sử dụng
GeometryReaderđể lấy chiều rộng màn hình. - Trừ đi padding và tính toán không gian có thể sử dụng cho các item.
- Tính toán số lượng item tối đa có thể hiển thị trên một hàng bằng cách chia không gian có thể sử dụng cho kích thước của một item cộng với khoảng cách giữa các item.
- Lưu ý rằng số khoảng cách giữa các item luôn ít hơn số item 1 đơn vị.
- Sử dụng
- Xác định số item còn lại ở hàng cuối:
- Sử dụng toán tử
%(remainder operator) để lấy số dư khi chia tổng số item cho số item trên một hàng. Số dư này chính là số lượng item ở hàng cuối cùng.
- Sử dụng toán tử
- Hiển thị các item:
- Sử dụng
dropLastđể loại bỏ các item ở hàng cuối để hiển thị trongLazyVGrid. - Sử dụng
suffixđể lấy các item còn lại ở hàng cuối và hiển thị chúng trong mộtHStackđể căn giữa.
- Sử dụng
- Xử lý khi xoay màn hình:
- Sử dụng
onAppearđể thực hiện các tính toán ban đầu khi view xuất hiện. - Sử dụng
onChangetrênGeometryReaderđể phát hiện khi chiều rộng màn hình thay đổi (khi thiết bị xoay) và thực hiện lại các tính toán để reflow lại layout.
- Sử dụng
- Refactor Code:
- Tạo một hàm
arrangeGridItemsđể chứa các tính toán layout để có thể tái sử dụng ở nhiều nơi (ví dụ trongonAppearvàonChange). - Truyền
geo(geometry proxy) vào hàmarrangeGridItems.
- Tạo một hàm
Chúc bạn học tập hiệu quả!
