0

Seit der Veröffentlichung von IOS 11.2 trifft meine App auf eine Endlosschleife, wenn sie einen Ansichtscontroller drückt, dessen Navigationscontroller eine benutzerdefinierte Höhe der Navigationsleiste hat. Hat jemand die Lösung für dieses Problem gefunden? Vielen Dank.iOS 11.2 benutzerdefinierte Navigationsleiste Endlosschleife

-(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); 
       } 

      } 

     } 
    } 
} 
+0

wo haben Sie in Ihrem Code Endlosschleife gefunden? Bitte erwähnen Sie diese Codezeile. –

+0

'self.frame = CGRectMake (0, 20, [[UIScreen mainScreen] Grenzen) .size.width, 55);' Diese Zeile provoziert die Endlosschleife –

+0

Okay. ist diese Unterklasse von UINavigationBar und wie fügen Sie Ihre benutzerdefinierte Navigationsleiste hinzu? –

Antwort

1

Ich hatte auch das gleiche Problem.
ich gelöst, indem diese

frame.size.height = customHeight 

von layoutSubviews zu entfernen und dann diese Unterklasse

override var frame: CGRect { 

    get { 

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

    } 
    set (value) { 
     super.frame = value 

    } 

} 

meiner UINavigationBar hinzufügen.
Ich habe alle anderen Code in layoutSubviews wie zuvor verlassen. (nb)

+0

Danke, diese Antwort sollte akzeptiert werden. – Kireyin

Verwandte Themen