#ios #swift #statusbar
#iOS #swift #строка состояния
Вопрос:
У меня возникла проблема с отображением StatusBar
в моем UITableViewController
, потому что у него нет фона. Поэтому я хочу иметь возможность делать это программно. Я видел это в таких приложениях, как Facebook
и Youtube. Кто-нибудь может мне с этим помочь?
Комментарии:
1. Проясните свой вопрос. Что вы хотите спросить?
2. Как программно добавить представление за строкой состояния?
3. Вы имеете в виду установить другой цвет для строки состояния и панели навигации. Пример: цвет панели навигации — серый, а цвет строки состояния — красный. Или хотите отображать панель навигации и строку состояния того же цвета, что и Facebook?
Ответ №1:
Чтобы добавить представление за строкой состояния, вы можете использовать приведенный ниже код, который написан для Swift 3
Вам нужно создать для него расширение, и вы можете использовать его в любом контроллере представления, где это требуется.
let SCREEN_WIDTH = UIScreen.main.bounds.size.width
extension UIViewController {
func addStatusBarBackgroundView(viewController: UIViewController) -> Void {
let rect = CGRect(origin: CGPoint(x: 0, y: 0), size:CGSize(width: SCREEN_WIDTH, height:20))
let view : UIView = UIView.init(frame: rect)
view.backgroundColor = UIColor.init(red: 255/255, green: 255/255, blue: 255/255, alpha: 1) //Replace value with your required background color
viewController.view?.addSubview(view)
}
}
и просто вызовите это, написав одну строку в вашем контроллере представления:
override func viewDidLoad() {
super.viewDidLoad()
addStatusBarBackgroundView(viewController: self)
//Your extra code
}
Счастливого кодирования ..!!
Комментарии:
1. Это то, что я ищу, проблема, однако, заключается в том, что фон не сохраняет свое место за строкой состояния при прокрутке. Мне это нужно для этого 🙂
2. @FeReTu Пожалуйста, опубликуйте код, чтобы точно понять проблему. Кроме того, назначили ли вы класс контроллера представления с подклассом в качестве вида прокрутки?
Ответ №2:
Чтобы ваша панель UINavigationBar простиралась за строкой состояния, вы можете реализовать функцию position(for:) в делегате панели навигации.
Пример Swift3
class MyViewController: UIViewController {
@IBOutlet weak var navigationBar: UINavigationBar!
override func viewDidLoad() {
super.viewDidLoad()
navigationBar.delegate = self
}
}
extension MyViewController: UINavigationBarDelegate {
func position(for bar: UIBarPositioning) -> UIBarPosition {
return .topAttached
}
}
Комментарии:
1. это приведет к ошибке — невозможно добавить делегата на панель навигации