2017-11-16 15 views
-3

iOS 앱을 8에서 XCode9로 이전 중입니다. 무엇이 원인인지 모르지만 Swift 3.2/Xcode 9가 잘못 작동하는 것으로 보입니다.상태 표시 줄의 가시성이 iOS에서 통일되지 않았습니다

그래서이 응용 프로그램은 모든보기 컨트롤러에 상태 표시 줄을 가지고 있으므로 마이그레이션을 마친 후 홈보기 만 표시되기 시작했습니다. 탭 버튼으로보기를 변경하면 다음 스크린 샷처럼 비게됩니다.

Home view

Another view

View controller-based status bar appearance

NO하고 Hide Status Bar 내가 setNeedsStatusBarAppearanceUpdate() 및 해당 매개 변수하지만 여전히 작동하지 않는 추가 OFF

입니다.

여기에 "다른보기"의의 ViewController의 코드는

import UIKit 

class InfoViewController: UITableViewController { 

private var threads: [Info] = [] 
private var loading: Bool = false 
private var hasNext: Bool = true 

private var selectedThread: Info? 
private var noInfoView: UIView? 

internal var shouldRefresh: Bool = true 
private var pagingIndicatorView: UIActivityIndicatorView! 

private var timer: Timer? 
private var poolingInterval: TimeInterval = 60 * 3 

private var shouldClearThread: Bool = false 
private var nextViewController: InfoDetailViewController? 

let RequireCheckStatusForMessagesNotificationKey = "RequireCheckStatusForMessagesNotificationKey" 

deinit { 
    NotificationCenter.default.removeObserver(self) 
    stopPooling() 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    setNeedsStatusBarAppearanceUpdate() 
    tableView.contentInset.bottom = 40 

    pagingIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray) 
    pagingIndicatorView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50) 
    pagingIndicatorView.hidesWhenStopped = true 

    NotificationCenter.default.addObserver(self, selector: #selector(InfoViewController.requireCheckInfosForMessagesNotificationHandler(notif:)), name: NSNotification.Name(rawValue: RequireCheckStatusForMessagesNotificationKey), object: nil) 
} 

var statusBarStyle : UIStatusBarStyle = .lightContent 

override var preferredStatusBarStyle: UIStatusBarStyle { 
    get { 
     return statusBarStyle 
    } 
} 

var statusBarStatus : Bool = false 

override var prefersStatusBarHidden: Bool { 
    get { 
     return statusBarStatus 
    } 
} 
+1

"하지만 Swift 3.2/Xcode 9가 잘못 작동하는 것처럼 보입니다."아니요. _You_ 뭔가 잘못하고 있습니다. 하지만 당신이하고있는 일을 우리에게 말하지 않고, 그것이 무엇인지를 누가 압니까? 도움이 필요하시면 앞으로 더 많은 도움을 받아야합니다. – matt

+0

@matt 죄송하지만 상태 표시 줄에 대한 코드는 작성되지 않았습니다 ... 필요한 정보를 알려주실 수 있습니까? – kela

+0

"스크래치 아웃"영역과 관련된 * 특정 * 문제를 이해하는 것은 매우 어렵습니다 ('코드 덤프'및 설명과 함께 Swift가 아닌 'NO/YES'문구와 함께). 그래서 이것을 시도해 봅시다 .... (1) "Swift 3.2/Xcode 9"와 ** Swift 3.1 및 Xcode 8 사이에서 정확히 ** 다른 점이 더 나은 스크린 샷 또는 언어로 설명 할 수 있습니까? (2) 문제를 실제로 복제 할 수있을 정도로 코드를 축소 할 수 있습니까? 분명한 점은 @matt가 이미 말했듯이 * fault *는 ** Swift 3.2 또는 Xcode 9가 아니라는 것입니다. 그렇다면 다른 사람들은 몇 달 동안 불평 할 것입니다. – dfd

답변

0

그것은 YESView controller-based status bar appearance 설정을하고 UIViewController의 다음 매개 변수와 함께 플레이하는 것이 더 쉽습니다 :

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { 
    get { 
     return .slide 
    } 
} 

var statusBarStyle : UIStatusBarStyle = .default 

override var preferredStatusBarStyle: UIStatusBarStyle { 
    get { 
     return statusBarStyle 
    } 
} 

var statusBarStatus : Bool = false 

override var prefersStatusBarHidden: Bool { 
    get { 
     return statusBarStatus 
    } 
} 

당신은 여기에서 볼 수 있듯이 , 내가 실제로 원하는 값에 대한 사용자 지정 저장된 매개 변수를 참조하므로 상태 표시 줄의 업데이트를 변경하면 해당 사용자 지정 매개 변수를 변경하고 statusBarNeedsUpdate을 호출해야합니다.

이 방법을 시도해도 문제가 해결되지 않으면 컨트롤러에 코드를 제공하십시오.

+0

그들을 추가했지만 여전히 작동하지 않는 시도 :(나는 질문을 편집하므로보십시오 – kela