コード
今回はStoryboard
には何も追加しなくてOKです
import UIKit
class ViewController: UIViewController {
private var topSafeAreaHeight: CGFloat = 0
private var bottomSafeAreaHeight: CGFloat = 0
private var topSafeAreaLabel: UILabel!
private var bottomSafeAreaLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
setupView()
}
private func setupView() {
// Top Safe Area 下のラベル
topSafeAreaLabel = UILabel()
topSafeAreaLabel.backgroundColor = UIColor.orange
topSafeAreaLabel.text = "Top Safe Area"
topSafeAreaLabel.textAlignment = NSTextAlignment.center
topSafeAreaLabel.textColor = UIColor.white
topSafeAreaLabel.font = UIFont.boldSystemFont(ofSize: 20)
self.view.addSubview(topSafeAreaLabel)
// Bottom Safe Area 上のラベル
bottomSafeAreaLabel = UILabel()
bottomSafeAreaLabel.backgroundColor = UIColor.purple
bottomSafeAreaLabel.text = "Bottom Safe Area"
bottomSafeAreaLabel.textAlignment = NSTextAlignment.center
bottomSafeAreaLabel.textColor = UIColor.white
bottomSafeAreaLabel.font = UIFont.boldSystemFont(ofSize: 20)
self.view.addSubview(bottomSafeAreaLabel)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if #available(iOS 11.0, *) {
// viewDidLayoutSubviewsでSafeAreaの取得を行う
topSafeAreaHeight = self.view.safeAreaInsets.top
bottomSafeAreaHeight = self.view.safeAreaInsets.bottom
print("Top SafeArea: \(topSafeAreaHeight)")
print("Bottom SafeArea: \(bottomSafeAreaHeight)")
let width: CGFloat = self.view.frame.width
let height: CGFloat = self.view.frame.height
let labelHeight: CGFloat = 50
topSafeAreaLabel.frame = CGRect(
x: 0, y: topSafeAreaHeight,
width: width, height: labelHeight)
bottomSafeAreaLabel.frame = CGRect(
x: 0, y: height - (labelHeight + bottomSafeAreaHeight),
width: width, height: labelHeight)
}
}
}