Bu problem üzerinde başımı kaşıdım. TabBar öğesinin nasıl başlatıldığı ve görünüm hiyerarşisine nasıl eklendiği ile ilişkili görünmektedir. Ayrıca invalidateIntrinsicContentSize
, arama , çerçeve ayarlama ve ayrıca bottomInsets
bir UITabBar alt sınıf içinde çözümleri denedim . Ancak geçici olarak çalışıyor gibi görünüyorlar ve başka bir senaryoyu kırıyorlar veya belirsiz bir düzen sorununa neden olarak sekme çubuğunu geriliyorlar. Sorunu ayıklarken UITabBar ve centerYAnchor'a yükseklik kısıtlamaları atamayı denedim, ancak ikisi de sorunu çözmedi. Görünüm hata ayıklayıcısında, tabBar yüksekliğinin sorun yeniden oluşturulduktan önce ve sonra doğru olduğunu fark ettim, bu da sorunun alt görünümlerde olduğunu düşünmemi sağladı. Başka bir senaryoyu gerilemeden bu sorunu başarıyla düzeltmek için aşağıdaki kodu kullandım.
- (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];
}];
}
}
Varsayımlar: Şu anda başka bir cihazda çoğalmadığı için bunu sadece iPhone X için yapıyorum. Apple'ın gelecekteki iOS sürümlerinde UITabBarButton sınıfının adını değiştirmediği varsayımına dayanmaktadır. Bunu UITabBarButton'da yapıyoruz, ancak elma UITabBar'a daha fazla dahili alt görünüm ekliyorsa, bunun için ayarlamak için kodu değiştirmeniz gerekebilir.
Lütfen bunun işe yarayıp yaramadığını, öneri ve iyileştirmelere açık olacağını biliyorum!
Bunun için hızlı bir eşdeğer oluşturmak basit olmalıdır.