2015-03-17 4 views
3

Недавно я добавил scrollview к моему диспетчеру просмотра. Однако это привело к тому, что мой макет полностью испортился.Быстрые проблемы с ограничениями с UIScrollView (программно)

Вот изображение ниже.

screenshot

(я дал UIScrollView временный красный фон, чтобы показать, что это явно принимая во весь экран)

в настоящее время. В этой точке зрения у меня есть куча вещей. Но чтобы это было просто, я сосредоточусь на верхней синей полосе, которую в моем приложении называют «topBar»

Во-первых, я определяю его в своем классе.

var topBar = UIView() 

Я удаляю автоматический размер, придаю ему цвет и добавьте его в свой прокрутки.

//----------------- topBar ---------------// 

    topBar.setTranslatesAutoresizingMaskIntoConstraints(false) 
    topBar.backgroundColor = UIColor.formulaBlueColor() 
    self.scrollView.addSubview(topBar) 

добавить его к моему viewsDictionary:

var viewsDictionary = [ "topBar":topBar] 

добавить высоту к моему metricsDictionary:

let metricsDictionary = ["topBarHeight":6] 

установить высоту в замасливающем ограничении.

//sizing constraints 
    self.scrollView.addConstraints(
     NSLayoutConstraint.constraintsWithVisualFormat(
      "V:[topBar(topBarHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary)) 

И, наконец, часть, которая не работает. I/попытка/сделать его полная ширина «Scrollview»

// Horizontal Constraints 
    self.scrollView.addConstraints(
     NSLayoutConstraint.constraintsWithVisualFormat(
      "H:|[topBar]|", options: nil, metrics: nil, views: viewsDictionary)) 

и мое вертикальное ограничение, чтобы положить его в верхней части.

// Vertical Constraints 
    self.scrollView.addConstraints(
     NSLayoutConstraint.constraintsWithVisualFormat(
      "V:|[topBar]", options: nil, metrics: nil, views: viewsDictionary)) 

Теперь, как для моего Scrollview, (тот, который, вероятно, является причиной моего макета головные боли)

Он создан следующим образом:

как самое первое, что в классе:

let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds) 

первая вещь в моей viewDidLoad()

self.view.addSubview(scrollView) 
    scrollView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    scrollView.scrollEnabled = true 

и, наконец, мой просмотрDidLayoutSubviews.

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    scrollView.frame = view.bounds 
    scrollView.contentSize = CGSize(width:2000, height: 5678) 
} 

^Ширина contentSize будет изменяться по ширине экрана (я только хочу вертикальной прокруткой). Но сейчас это незначительная проблема по сравнению с проблемами макета, которые у меня есть

Любая помощь относительно того, почему все сжимается вместе, будем очень благодарны!

ответ

1

Мне удалось исправить это, сделав следующее.

Определение мой contentsize в viewDidLayoutSubviews

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    scrollView.frame = view.bounds 
    scrollView.contentSize = CGSize(width:self.view.bounds.width, height: 5678) 
} 

и вместо того, чтобы мнение, равную Scrollview, я должен был сделать это подвид из него.

Мне также пришлось сделать подзаголовок прокрутки, так как весь мой контент правильно работал с ограничениями.

self.view.addSubview(scrollView) 
    scrollView.translatesAutoresizingMaskIntoConstraints = false 

    contentView.translatesAutoresizingMaskIntoConstraints = false 
    scrollView.addSubview(contentView) 

и все другие мои объекты были сделаны в виде представлений «contentView», а не прокрутки.

Смежные вопросы