Tôi đã gãi đầu về vấn đề này. Nó dường như được liên kết với cách tabBar được khởi tạo và thêm vào để xem phân cấp. Tôi cũng đã thử các giải pháp trên như gọi điện invalidateIntrinsicContentSize
, đặt khung và cả bottomInsets
bên trong lớp con UITabBar. Tuy nhiên, chúng dường như hoạt động tạm thời và chúng phá vỡ một số kịch bản khác hoặc hồi quy thanh tab bằng cách gây ra một số vấn đề bố cục mơ hồ. Khi tôi gỡ lỗi sự cố, tôi đã thử gán các hạn chế về chiều cao cho UITabBar và cent trung tâm, tuy nhiên không khắc phục được sự cố. Tôi nhận ra trong trình gỡ lỗi xem rằng chiều cao của tabBar là chính xác trước và sau khi sự cố được sao chép, điều đó khiến tôi nghĩ rằng vấn đề nằm trong các cuộc phỏng vấn. Tôi đã sử dụng đoạn mã dưới đây để khắc phục thành công sự cố này mà không cần hồi quy bất kỳ kịch bản nào khác.
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
if (DEVICE_IS_IPHONEX())
{
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
for (UIView *view in self.tabBar.subviews)
{
if ([NSStringFromClass(view.class) containsString:@"UITabBarButton"])
{
if (@available (iOS 11, *))
{
[view.bottomAnchor constraintEqualToAnchor:view.superview.safeAreaLayoutGuide.bottomAnchor].active = YES;
}
}
}
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
[self.tabBar layoutSubviews];
}];
}
}
Giả định: Tôi chỉ làm điều này cho iPhone X, vì nó dường như không sao chép trên bất kỳ thiết bị nào khác vào lúc này. Dựa trên giả định rằng Apple không thay đổi tên của lớp UITabBarButton trong các bản phát hành iOS trong tương lai. Chúng tôi chỉ thực hiện điều này trên UITabBarButton khi có nghĩa là nếu apple thêm nhiều cuộc phỏng vấn nội bộ vào UITabBar, chúng tôi có thể cần phải sửa đổi mã để điều chỉnh cho điều đó.
Xin vui lòng cho biết nếu điều này hoạt động, sẽ được mở để đề xuất và cải tiến!
Nó nên đơn giản để tạo ra một tương đương nhanh chóng cho việc này.