2015-08-08 2 views
0

Я создал очень простой пользовательский класс из UIView. Наверху есть UIScrollView. Внутри UIScrollView я поместил пару кнопок. Положение кнопок находится вне прокрутки.UIButton в scrollView позиция неожиданная

Вот код.

class TestView: UIView { 

    var tabView: UIScrollView = UIScrollView() 
    var buttons = [UIButton]() 
    var tabHeight: CGFloat = 40.0 
    let screenWidth: CGFloat = UIScreen.mainScreen().bounds.width 
    var titles = [String]() 
    var numberOfTitles = 0 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 

     self.addSubview(tabView) 
    } 

    func createUI() { 
     tabView.frame = CGRect(x: 0, y: 0, width: screenWidth, height: tabHeight) 
     tabView.backgroundColor = UIColor.grayColor() 
     tabView.contentSize = CGSize(width: screenWidth, height: tabHeight) 

     numberOfTitles = titles.count 

     for var i = 0; i < numberOfTitles; ++i { 
      var button = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton 
      button.frame = CGRect(x: 50.0*CGFloat(i), y: 0, width: 50.0, height: tabHeight) 
      button.setTitle(titles[i], forState: UIControlState.Normal) 
      button.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal) 
      tabView.addSubview(button) 
     } 
    } 
} 

Вот как это выглядит, когда я отлаживаю представление иерархии. enter image description here

Но если я просто изменить UIScrollView к UIView, как показано ниже,

var tabView: UIView = UIView() 

Затем расположение кнопки правильно, как показано ниже.

enter image description here

Я не мог понять, почему. Пожалуйста помоги. Благодаря!

ответ

0

Это потому, что UIScrollView сам по себе может прокручивать вид контейнера. Что вам нужно сделать, это инициализировать UIScrollView, как вы делали изначально, но вместо того, чтобы добавить все компоненты в Scrollview, создать новый UIView называется conatinerView, изменить все tabView к containerView, затем изменить required init на:

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

    self.addSubview(tabView) 
    tabView.addSubview(containerView) 
} 

Но убедитесь, что размер рамки для containerView верен, а также точка начала.

+0

Извините, это не причина. Я нашел проблему. Контроллер представления встроен в контроллер навигации. И по умолчанию выбрано «Настроить прокрутки». Если я отменил выбор этой опции, исходный код будет работать. Благодарим за помощь. – user890207