iPhoneXのノッチに対応するため、StoryboardにSafe Areaが追加されました。従来は、Viewを基準にConstraintsを指定していましたが、Xcode9以降はSafe Areaを基準にConstraintsを指定することになります。

Safe Areaを使用するには、Safe Area Relative Marginsのチェックボックスを有効にします。その後、ConstraintsのAlign Top to:をViewからSafe Areaに変更します。

storyboard

また、Xcode8までは、ステータスバーの背景色を設定することができないため、ダークモードでは以下のように背景色となるビューを追加していました。

var h : CGFloat=20.0
dark_view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: w, height: h))
dark_view!.backgroundColor=bg_color
self.window!.rootViewController!.view.addSubview(dark_view!)

しかし、iPhoneXではステータスバーの高さが44pxに上がっているため、以下のようにサイズを調整する必要があります。

var h : CGFloat=20.0
if #available(iOS 11.0, *) {
    if(UIApplication.shared.windows[0].safeAreaInsets != UIEdgeInsets.zero){
        h=44.0
    }
}

ただ、実際にやってみると、ポートレートモードでは問題ないのですが、iPhoneXのランドスケープモードではステータスバーが表示されなくなったため、追加したサブビューがUIの上に被ってしまいます。そのため、サブビューを追加する方法ではなく、ステータスバーの背景色を直接、変えるようにした方がよいようです。(参考:Changing the Status Bar Color for specific ViewControllers using Swift in iOS8

extension UIApplication {
    class var statusBarBackgroundColor: UIColor? {
        get {
            return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
        } set {
            (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
        }
    }
}

UIApplication.statusBarBackgroundColor = bg_color;

また、ランドスケープモード時には左右のunsafeエリアが白で塗りつぶされます。この色を変えるには、viewDidLoadでview.backgroundColorに色を設定します。(参考:Changing the background color of the view, Swift

override func viewDidLoad() {
    super.viewDidLoad()
    if(dark_mode){
        let bg_color:UIColor=UIColor(red: r/255, green: r/255, blue: r/255, alpha: 1.0)
        view.backgroundColor = bg_color
    }
}