iOS 11.2自定义导航栏无限循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 11.2自定义导航栏无限循环相关的知识,希望对你有一定的参考价值。

ios 11.2发布以来,我的应用程序在推送导航控制器具有自定义导航栏高度的视图控制器时遇到无限循环。有人找到了这个问题的解决方案吗?谢谢。

-(void)layoutSubviews{
   [super layoutSubviews];
   float height = 42.5;

   if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
       height = 48;

   }

   imageView.frame = CGRectMake(0, 0, [[UIScreen mainScreen]bounds].size.width, height);
   if(UI_USER_INTERFACE_IDIOM() ==UIUserInterfaceIdiomPad){

       if(@available(iOS 11.0,*)){
           self.frame =CGRectMake(0, 20,[[UIScreen mainScreen]bounds].size.width, 55); // this line provoke the infinite loop

           for(UIView *aView in self.subviews){
               if([NSStringFromClass([aView class]) isEqualToString: @"_UINavigationBarContentView"]){
                   aView.frame = CGRectMake(0, 10, aView.frame.size.width, aView.frame.size.height);
               }
               if([NSStringFromClass([aView class]) isEqualToString: @"_UIBarBackground"]){
                   aView.frame = CGRectMake(0, 0, aView.frame.size.width, self.frame.size.height );
               }

           }

       }
   }
}
答案

我也有同样的问题。 我解决了这个问题

frame.size.height = customHeight

从layoutSubviews然后添加它

override var frame: CGRect {

    get {

        return CGRect(x: 0, y: 0, width: super.frame.width, height: customHeight)

    }
    set (value) {
        super.frame = value

    }

}

到我的UINavigationBar子类。 我在layoutSubviews中保留了之前的所有其他代码。 (NB)

以上是关于iOS 11.2自定义导航栏无限循环的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11.2 - 在带有大标题的导航栏中时,搜索控制器栏背景清晰

在ios中自定义导航栏

ios 11 自定义导航栏位于状态栏下方

layoutAttributesForElementsInRect 的无限循环

iOS:尝试自定义导航栏时出错

iOS 自定义导航栏 NavigationBar