2017-03-15 1 views
0

"이전"xcode 7/swift 2 프로젝트로 돌아갑니다.Xcode 8/Swift 3/ios 10 탐색 막대가 변경됩니까?

모든 내비게이션 막대에서 이상한 점이 발생했습니다.

나는이 같은 코드가 있습니다

TmpOldViewController.present(TmpNewViewController!, animated: TmpAnimate, completion: nil): 

정보 :이 다음 뷰를 전환과 같은 코드로 끝나는

@IBOutlet weak var outletCatalogNav: UINavigationItem! 

//... 

outletCatalogNav.title = "my title"; 

//... 

outletCatalogNav.leftbarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ownCatalogBackButton)); 

//...  

if (outletCatalogNav.leftbarButtonItem != nil) { 
    outletCatalogNav.leftbarButtonItem.leftBarButtonItem!.title = " back" 
} 

을 역사적인 이유로 내가 처리 뷰 컨트롤러는 아이폰 OS로 자신을 변화 앱 코드는 완전히 다른 개발 플랫폼, 언어 및 환경에서 변환되었습니다.

어쨌든, 버튼은 단순히 캡션의 왼쪽에 배치됩니다. 이제 ios10 시뮬레이터에서는 적어도 다음과 같이 렌더링됩니다 (그러나 여전히 왼쪽). 네비게이션 막대에 사용 된 원래 높이가 더 이상 충분하지 않습니다. (다른 컨트롤에 의해 덮여 있기 때문에) 아래 스크린 샷에서 볼 수 있습니다. 이것은 왼쪽 파란색 텍스트의 힌트와 함께.

enter image description here

제약 조건은 다음과 같습니다

Navigation Bar.top = Top Layout Guide.bottom 
TableViewCatalog.top = Navigation Bar.bottom 
Navigation Bar.leading = leadingMargin - 20 
trailingMargin = Navigation Bar.trailing - 20 

무엇을 변경? 탐색 바에서 일어나는 변경 사항에 대한 참조를 찾을 수 없었습니다. 참고로 스위프트 3로 변경 한 이후로는 이제 ios8 + 만 타겟팅하므로 iOS7 호환 솔루션이 필요하지 않습니다.

+0

독립적 인 탐색 모음을 사용하고 있습니까 (탐색기가없는 막대 만 사용)? – leanne

+0

@leanne 예 - 관련성이 높은 경우 더 많은 코드와 설명을 추가했습니다. – Tom

+0

또 다른 질문 몇 가지 : 1) 네비게이션 바에 대한 다른 제약은 무엇입니까? 2) 실제 장치에서 실행될 때도 동일한 작업을 수행합니까? – leanne

답변

0

있는 viewDidLoad()에서 어떤 미친 시행 착오를 통해 내가 발견

outletCatalogNav.leftbarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ownCatalogBackButton)); 

이 아닌 빈 상태 (empty)의 타이틀을 만들고 그것을 작동 : 제목이 실제로 나중에 설정되어 두 경우 모두

outletCatalogNav.leftbarButtonItem = UIBarButtonItem(title: "test", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ownCatalogBackButton)); 

-하지만 문제는 버튼을 만들 때 비어 있지 않은 제목이 있습니다.

1

iOS 10에서 독립적 인 탐색 막대와 관련하여 어떤 변화가 있는지 알 수 없으므로 구체적으로 질문에 답변 할 수 없습니다. 그러나, 나는 그것을 해결하기 위해 당신에게 두 가지 방법을 알 수 있습니다 :

1) 독립적 인 탐색 모음에 대한 적절한 제약과 값을 설정 다음과 같이
은 제약 조건이 설정되어 있는지 확인 :
- 탐색 Bar.Top을 = 최고 레이아웃 Guide.Bottom
- 탐색 Bar.Leading = Superview.Leading
- 탐색 Bar.Trailing = Superview.Trailing

그런 다음, 막대의 신원 관리자에서이 값을 가진 사용자 정의 속성을 추가 :
- 주요 경로 : barPosition
- 유형 : Number
- 값 : 3

이 그것이 탐색 컨트롤러에 붙어 것처럼 행동 수있는 방법으로 독립 탐색 모음을 설치합니다.

참고 : 막대가 올바른 높이가 아닌 것처럼 스토리 보드에 표시됩니다. 괜찮아! 실제로 앱을 실행할 때 적절하게 조정됩니다.

업데이트 :하지만 "사용자 정의 속성"을 사용하지 않고 동일한 솔루션 :
는 - 전술 한 바와 같이 제약이 설정되어 있는지 확인합니다.
- 스토리 보드의 탐색 막대를 뷰 컨트롤러에 @IBOutlet으로 연결합니다.
-보기 컨트롤러의 클래스에서 UINavigationBarDelegate 프로토콜을 클래스 선언에 추가하십시오.
-보기 컨트롤러의 viewDidLoad 메서드에서 탐색 모음의 대리자를 self로 설정합니다.
-보기 컨트롤러에서 표시 줄 위치 지정 대리자의 positionForBar 메서드를 추가하십시오. TopAttached를 나타내는 UIBarPosition를 돌려줍니다. (참고 : UINavigationBarDelegate는 UIBarPositioningDelegate에서이 메서드를 상속받습니다.)

자세한 내용은 Easily use a Navigation Bar without a corresponding Navigation Controller 데모 GIF를 참조하십시오. "사용자 정의 속성"방법에 대한 자세한 내용

, Even more easily use a Navigation Bar without a corresponding Navigation Controller!

2)는 내비게이션 제어부로 볼 삽입 참조 :
- 다른 스토리에서, "독립적 인"탐색 줄 삭제.
- 탐색 모음이있는보기가 선택되어 있는지 확인하십시오.
- 메뉴에서 Editor/Embed In/Navigation Controller를 선택하십시오.

참고 : nav 컨트롤러에 대해 아무 것도 코딩하거나 하위 클래스를 만들 필요가 없습니다. 자동 탐색 바를 적절하게 처리합니다.


사이드 노트 : iOS 7에서 생성 된 앱에는 독립적 인 탐색 바도 있습니다. Xcode 8/iOS 10에는 동일한 문제가있었습니다.

위의 첫 번째 방법을 사용하여 탐색 표시 줄 문제를 해결했습니다. 그러나 그때 나는 깜박임을 시작했다. (아마도 iOS 10의 바 애니메이션과 관련이있다.)

시작 이미지를 사용하고있었습니다. 이미지가 탐색 막대 애니메이션과 다를 수 있습니다. 그래서, 방법 2로 바꿨습니다. 내보기를 탐색 컨트롤러에 임베드했습니다. 그런 다음 사용했던 시작 이미지를 제거하고 nav 컨트롤러에 포함 된보기로 빌드 된 새로운 시작 화면을 추가했습니다. 함께, 깜박임을 처리했습니다.

을 나는이 같은 즉, 문제를 내가받을 하늘의 타이틀로 버튼을 만들 경우이 오류가 발생하는 이유

+0

설정하지 않은 특별한 이유가 있습니까? TableViewCatalog.top = Navigation Bar.bottom? 내가 그걸 지켜 줄 수 있니? – Tom

+0

솔루션 # 1 사용 : barPosition을 설정하여 수행하는 작업 - 어떻게 든 런타임을 수행 할 수 있습니까? – Tom

+0

당신의 솔루션 # 2 - 본질적으로 내가보기를 제어하기 위해 전체 앱에 걸쳐 사용하기 위해 모든 논리를 제거하거나 적어도 다시 작성해야한다는 의미는 아니겠습니까? (이것은 꽤 간단한 stackbased 로직이지만 여전히 이론적으로는 여러 레벨을 "back"하는 것을 선호 할 것입니다.) – Tom

관련 문제