Я использую UIActivityIndicatorView внутри подробного представления UISplitViewController, и он не центрируется, он более выровнен по правому краю, вот мой код, который добавляет UIActivityIndicatorView:
indicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) as UIActivityIndicatorView
//Set the activity indicator center
indicator.center = self.view.center
//Hide the indicator when its stopped.
indicator.hidesWhenStopped = true
//Set the style of the activity indicator
indicator.style = UIActivityIndicatorView.Style.white
//Set the background colour of the activity indicator
indicator.backgroundColor = UIColor(white: 0.0, alpha: 0.6)
//Make the activity indicator have rounded corners
indicator.layer.cornerRadius = 15
//Add activity indicator to view
self.view.addSubview(indicator)
//Start activity indicator
self.indicator.startAnimating()
Почему это не центрируется?
Просто сделав это: indicator = UIActivityIndicatorView () ничего не появится.





Это центрирует мой UIActivityIndicatorView
override func viewDidLayoutSubviews() {
if (self.indicator != nil)
{
self.indicator.center = self.view.center
}
}
Вам следует избегать создания экземпляра UIActivityIndicatorView с фреймом и вместо этого использовать этот инициализатор:
init(style:
UIActivityIndicatorView.Style)
Как указано в документация:
UIActivityIndicatorViewsizes the returned instance according to the specified style. You can set and retrieve the style of a activity indicator through thestyleproperty.
Итак, вы должны сделать что-то вроде этого:
override func viewDidLoad() {
self.myActivityIndicatorView = UIActivityIndicatorView(style: .white)
}
override viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.myActivityIndicatorView.center = self.view.center
}
Я пробовал ваш код в функции viewWillAppear, и он работает ... в любом случае, если вы хотите использовать другой подход, но сохраняя вид bg с закругленными углами:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
myActivityIndicatorView = UIActivityIndicatorView(style: .white)
myActivityIndicatorView?.hidesWhenStopped = true
myActivityBGView = UIView.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
myActivityBGView?.backgroundColor = UIColor(white: 0.0, alpha: 0.6)
myActivityBGView?.layer.cornerRadius = 15
if let myActivityIndicatorView = myActivityIndicatorView,
let myActivityBGView = myActivityBGView {
myActivityBGView.addSubview(myActivityIndicatorView)
view.addSubview(myActivityBGView)
myActivityIndicatorView.center = myActivityBGView.center
myActivityBGView.center = view.center
myActivityIndicatorView.startAnimating()
}
}
может это быть из-за того, что вы пытаетесь установить ширину / высоту на 100? Потому что у него уже есть внутренний размер содержимого. Возможно, попробуйте инициализировать его как UIActivityIndicatorView () и просто настроить центр