1

iOS 11부터 setLeftBarButtonItems(_, animated: Bool), setRightBarButtonItems(_, animated:), setLeftBarButton(_, animated:), setRightBarButton(_, animated:) 개의 메소드에서 animated 매개 변수가 무시되는 것 같습니다. iOS 11에서 작동하지 않는 UIBarButtonItem 애니메이션 설정

은 내가 UIViewController 서브 클래스에 대한 간단한 코드를 만들어 : 아이폰 OS 10에서 예상하지만, 아이폰 OS (11)에 animatedtrue 또는 false인지 차이가 ​​없기 때문에

override func viewDidLoad() { 
    super.viewDidLoad() 

    let rightButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(changeRightBarButtonItem(_:))) 
    navigationItem.rightBarButtonItem = rightButton 
} 

@objc 
func changeRightBarButtonItem(_ sender: Any) { 
    let newRightButton = UIBarButtonItem(title: "Cancel", style: .plain, 
              target: self, action: #selector(changeRightBarButtonItem(_:))) 
    navigationItem.setRightBarButtonItems([newRightButton], animated: true) 
} 

이 실행됩니다.

iOS 11 인 것처럼 보이지만 뭔가 놓친 것 같습니다. 작동하게 만드는 힌트가 있습니까? 해결 방법조차도 흥미로울 것입니다.

+0

당신은 IOS (10)의 애니메이션 그래서 우리는 쉽게 그것을 해결나요 문제 –

+0

을 이해할 수 보여줍니다 GIF 파일을 추가 했습니까? –

+0

아니지만 iOS 11.2 베타 버전의 시뮬레이터에서 다시 작동합니다. 아직 장치에서 테스트하지 않았습니다. – Sparga

답변

0

iOS 11 navbar의 구현에 버그가있는 것 같습니다.

인용 :

setLeftBarButtonItem:animated:, setRightBarButtonItem:animated:, setLeftBarButtonItems:animated:setRightBarButtonItems:animated: 정말 애니메이션되지 않은 항목을 모두.

iOS 11 구현 버그라고 생각합니다. 이러한 mtehod의 호출 체인에서 균일하게 updateTopNavigationItemAnimated:을 호출하기 때문에 현재 구현은 이와 유사합니다.

-[_UINavigationBarVisualProviderModernIOS updateTopNavigationItemAnimated:]: 
0000000000be5708   push  rbp 
; Objective C Implementation defined at 0x13ff050 (instance method), DATA XREF=0x13ff050 
0000000000be5709   mov  rbp, rsp 
0000000000be570c   mov  rsi, qword [0x147f030] 
; @selector(setupTopNavigationItem), argument "selector" for method _objc_msgSend 
0000000000be5713   pop  rbp 
0000000000be5714   jmp  qword [_objc_msgSend_11195c8] 
; _objc_msgSend 

는 Obvisouly,이 방법은 애니메이션 인수를 주어 간단히 arugments을하지 않는 setupTopNavigationItem 호출을 무시합니다. 따라서 애니메이션 플래그는이 시점에서 무시됩니다.

이 구현 때문에 UIBarButton이 눌려진 상태로 유지되는 경우가 있습니다.

출처 : https://gist.github.com/niw/569b49648fcab22124e1d12c195fe595

관련 문제