2016-10-21 3 views
1

Я борюсь с этим все утро и, похоже, не могу найти решение. Я создал UIImageView, наполнил его красным, затем добавил его в UIScrollView и установил contentSize размером UIImageView. Если я напечатаю contentOffset, я вижу (0, 0), и если я напечатаю contentSize и UIImageView.frame.size, они будут такими же, но красное «изображение» всегда оказывается меньше, чем scrollView считает contentSize.Невозможно правильно настроить UIScrollView (смещение сверху)

Если я прокручиваю весь путь до вершины, я вижу голубую полосу около 100 пикселей выше красного изображения, а полоса прокрутки не будет полностью соответствовать вершине того, что я считаю верхней частью моего вида прокрутки быть. Хотя верхняя часть полосы прокрутки совпадает с верхней частью моего красного окна, похоже, что представление прокрутки путается относительно того, где она на самом деле живет. Или, скорее всего, я запутался

IMG http://i64.tinypic.com/33mwewj.png

Вот мой, что кажется очень простой код ...

imgHorizon = UIImage.init(named:"horizon")! 
    imgBezel = UIImage.init(named:"bezel_transparent")! 
    imgWings = UIImage.init(named:"wings_transparent")! 

    imgViewHorizon = UIImageView.init() 
    imgViewBezel = UIImageView.init() 
    imgViewWings = UIImageView.init() 

    svHorizon = UIScrollView.init() 

    super.init(coder: aDecoder) 

    imgViewHorizon = UIImageView(frame: CGRect(x: 0, y: 0, width: imgBezel.size.width, height: imgHorizon.size.height)) 
    imgViewHorizon.backgroundColor = UIColor.red 

    imgViewBezel = UIImageView(frame: CGRect(x: 0, y: 0, width: imgBezel.size.width, height: imgBezel.size.height)) 
    imgViewBezel.contentMode = UIViewContentMode.center 
    imgViewBezel.clipsToBounds = true 
    imgViewBezel.image = imgBezel 

    imgViewWings = UIImageView(frame: CGRect(x: 0, y: 0, width: imgBezel.size.width, height: imgBezel.size.height)) 
    imgViewWings.contentMode = UIViewContentMode.center 
    imgViewWings.clipsToBounds = true 
    imgViewWings.image = imgWings 

    svHorizon = UIScrollView(frame: CGRect(x: 0, y: 0, width: imgBezel.size.width, height: imgBezel.size.width)) 
    svHorizon.contentSize = CGSize(width: imgBezel.size.width, height: imgHorizon.size.height) 
    svHorizon.contentMode = UIViewContentMode.scaleToFill 
    svHorizon.bounces = false 
    svHorizon.backgroundColor = UIColor.cyan 
    svHorizon.contentOffset = CGPoint(x: 0, y: 0) 

    svHorizon.addSubview(imgViewHorizon) 
    addSubview(svHorizon) 
    addSubview(imgViewBezel) 
    addSubview(imgViewWings) 
+1

Для быстрой диагностики, пожалуйста, скажите, где вы написали этот код в 'ViewController'? В «Attributes Inspector» вашего «ViewController» снимите флажок «Настроить прокрутки». – Adeel

+0

Я написал его в классе, который наследуется от UIView. Этот код находится в методе 'required init? (Coder aDecoder: NSCoder)'. В интерфейсе builder я удалил UIView на моем контроллере view и установил класс в свой собственный класс. – lusher00

+0

Переопределите метод 'layoutSubviews' и установите рамки ваших' imageViews'. Вы сняли флажок «Настроить прокрутки»? – Adeel

ответ

1

Из обсуждения в комментариях выясняется, что вариант Adjust Scroll View Insets был проверяется в инспекторе атрибутов ViewController. Устранение проблемы устраняет проблему. Посмотрите на изображение ниже. Вам нужно снять отметку с выделенной опции.

Attributes of the View Controller