Scrollview в пользовательском представлении XIB, чтобы соответствовать разной ширине - PullRequest
0 голосов
/ 22 сентября 2018

В настоящее время я реализую пользовательский вид из xib с размером Content View, установленным в Freeform.Вот моя иерархия просмотра контента

Content View hierarchy

Несмотря на то, что просмотр контента выполнен в произвольной форме, я установил ширину 375, которая равна ширине iPhone 8.Затем я создаю пользовательский файл UIView

override init(frame: CGRect) {
    super.init(frame: frame)
    commonInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    commonInit()
}

private func commonInit() {
    Bundle.main.loadNibNamed("DetailsWeather", owner: self, options: nil)
    addSubview(contentView)
    contentView.frame = self.bounds
    contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]

}

После этого я задаю имя пользовательского класса xib File’s Owner для того же пользовательского файла UIView, описанного выше.Затем я внедряю его в Main.storyboard, добавив UIView, правильно установив ограничения и присвоив ему имя пользовательского класса, такое же, как у File’s Owner

. При запуске iPhone 8 все идеально, но переключаюсь на более маленькое устройство, такое как iPhone.5с, я заметил, что мой вид прокрутки теперь имеет горизонтальную прокрутку.В отличие от iPhone 5s, устройства с большим экраном, такого как iPhone 8+, мой вид прокрутки теперь немного потерял правую сторону.

Notice the labels does not align with the clock which is center on iP8+ anymore Обратите внимание, что метки больше не совпадают с часами, которые больше расположены по центру на iP8 +

Поэтому я попытался удалить вид прокрутки, и все устройства работают нормально на устройствах,Таким образом, я подумал, что представление прокрутки должно испортить мой собственный вид.Затем я провожу самостоятельные исследования и выясняю эти темы.

Как обновить ограничения после добавления UIView из xib в UIScrollView в swift?

ScrollView Добавить SubView в swift 3

Я попробовал их решение и доработал, чтобы соответствовать моей ситуации, но ни один из них, похоже, не работает со мной.Итак, мой вопрос: есть ли способ сделать Content View файла xib подходящим для каждой ширины?

1 Ответ

0 голосов
/ 23 сентября 2018

Только что решено сегодня, прекрасно чувствует себя tbh

  1. Удалите все вышеперечисленные шаги, просто сохраните IBOutlet в вашем пользовательском файле UIView
  2. Удалите File’s Owner Имя пользовательского класса и замените Content View Пользовательское имя класса совпадает с именем вашего пользовательского UIView
  3. Добавьте UIView в ваш Main.storyboard, мой случай ScrollView.Добавьте все необходимые ограничения (duh)
  4. Добавьте IBOutlet для ScrollView следующим образом @IBOutlet weak var scrollView: UIScrollView!
  5. Перейдите к файлу View Controller
  6. let alohaView = Bundle.main.loadNibNamed("Feature", owner: self, options: nil)?.first as? FeatureView с помощью Featurexib-файл и FeatureView - это ваш пользовательский элемент управления UIView, в котором xib-файл
  7. добавляет alohaView?.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 500) уведомление. Я жестко задал высоту 500, будет работать с этим
  8. scrollView.contentSize = CGSize(width: self.view.frame.size.width, height: (alohaView?.frame.size.height)!)
  9. scrollView.addSubview(alohaView!) добавить пользовательский вид обратно в вид с прокруткой
...