![Screenshot from simulator iphone xr](https://i.stack.imgur.com/N3QN7.png)
Привет.
Используя Swift 4, я пытаюсь загрузить пользовательский UIView с XIB на UIViewController.
Однако кажется, что он только частично заполняет экран, и я не уверен, почему.
Я сделал следующее:
- Контроллер представления определенв UIStoryboard
- UIViewController, который добавляет UIView в
viewDidLoad
- Файл Swift UIView и XIB подключаются через свойство «Владелец файла»
- Добавляется файл XIBв
copy bundle resources
- Ярко-розовый цвет фона устанавливается с помощью визуального редактора Xcode, это не делается в коде.
- Я имитирую с помощью iphone xr, но я получаю ту же проблему, еслиЯ симулирую на iPhone 6s
Код контроллера представления пуст, но я включил соответствующую часть:
// QuestionViewController
class QuestionViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let subview = QuestionView()
self.view.addSubview(subview)
}
}
UIView также довольно прост:
class QuestionView: UIView, XibView {
override init(frame: CGRect) {
super.init(frame: frame)
setupXib()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupXib()
}
func setupXib() {
guard let v = loadFromXib() else {
return
}
addSubview(v)
}
}
Я использую протокол, который я нашел в stackoverflow, чтобы загрузить файл xib из комплекта.Первоначально у меня было много проблем, даже при загрузке пакета, но, к счастью, я смог исправить эту проблему.В любом случае, мой файл протокола XIB находится здесь:
// XIB protocol file
protocol XibView {
func setupXib()
func constrainView(_ view: UIView)
func loadFromXib() -> UIView?
}
extension XibView where Self: UIView {
func setupXib() {
if let xibView = loadFromXib() {
addSubview(xibView)
constrainView(xibView)
}
}
func constrainView(_ view: UIView) {
view.translatesAutoresizingMaskIntoConstraints = false
addConstraints(
NSLayoutConstraint.constraints(
withVisualFormat: "V:|[view]|",
options: [.alignAllCenterX, .alignAllCenterY],
metrics: nil,
views: ["view": view]
)
)
addConstraints(
NSLayoutConstraint.constraints(
withVisualFormat: "H:|[view]|",
options: [.alignAllCenterX, .alignAllCenterY],
metrics: nil,
views: ["view": view]
)
)
}
func loadFromXib() -> UIView? {
let xibView = UINib(nibName: String(describing: Self.self), bundle: Bundle(for: type(of: self))).instantiate(withOwner: self, options: nil).first as? UIView
return xibView
}
}
-
Вопрос:
Почему UIView не заполняет весь экран илитолько заполнить экран частично, и как я могу решить эту проблему?
С благодарностью
Редактировать:
Раскадровка для UIViewController выглядит только в одном представлении без содержимого.
![Storyboard](https://i.stack.imgur.com/olIkC.png)