2015-07-17 4 views
2

Это около дубликат этого другого SO question, однако я сталкиваюсь с некоторыми проблемами, которые он заставляет выглядеть так, будто я делаю это неправильно. Для справки я последовал за этим excellent tutorial on creating re-usable views из пользовательского класса и xib-файла (это всего несколько минут :), и у меня нет никаких проблем, перетаскивая это в другое представление на мою раскадровку (как показано в конце видео)Быстро: добавьте пользовательский UIView программно

Тем не менее для моего случая - я пытаюсь вызвать свой пользовательский класс программно и добавить его в качестве подсмотра в один из моих ScrollView экземпляров.

class MainController: UIViewController { 

    @IBOutlet weak var scrollView: UIScrollView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     first.directionalLockEnabled = true 
     first.pagingEnabled = true 
     var item = MyCustomView(frame: CGRectMake(0, 0, self.view.frame.width, 200)) 
     self.scrollView.addSubview(item) 
    } 

} 

Мой заказ вид выглядит следующим образом:

import UIKit 

class MyCustomView: UIView { 
    @IBOutlet var view: UIView! 
    @IBOutlet weak var imageView: UIImageView! 
    @IBOutlet weak var dressTitle: UILabel! 
    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     NSBundle.mainBundle().loadNibNamed("MyCustomView", owner: self, options: nil) 
     self.view.frame = bounds 
     self.addSubview(self.view) 
    } 
    override init(frame: CGRect) { 
     super.init(frame: frame) 

    } 
} 

Существует ассоциированный .xib файл с ним тоже, что имеет метку и изображение.

Так что мой вопрос: мой взгляд никогда не появляется в моем ScrollView. Я дважды проверял ограничения на свой просмотр прокрутки ... Я могу даже добавить простые UIView с видимыми видимыми размерами CGRectMake(0, 0, 100, 100) ... и ничего не дает. Что мне не хватает?

+0

Вы можете распечатать дополнительную информацию о viewDidAppear ?? например, self.view.frame и self.scrollView.frame также self.scrollView.subViews.count –

+0

'customView = MyCustomView (frame: CGRectZero (вверху: 0, слева: 0, ширина: 200, высота: 50) 'попробуй вот так –

+0

Да, я пробовал это на всякий случай тоже :). Мой главный 'self.view.frame' -' (0.0, 0.0, 320.0, 568.0) ', а' self.scrollView.frame' - '(0.0, 11.0, 320.0, 200.0)' – ded

ответ

3

С некоторыми беспорядками я случайно получил его для работы, дублируя метод loadFromNib на второй инициализатор в файле CustomView.swift. Как видно из видеоурока, опубликованного в исходном вопросе, он показывает только один из инициализаторов .... но в моем случае мне пришлось добавить дополнительный код в init(frame). Например:

// once with a NSCoder 
required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    NSBundle.mainBundle().loadNibNamed("Item", owner: self, options: nil) 
    self.view.frame = bounds 
    self.addSubview(self.view) 
} 

// for this to work programmatically I had to do the same... 
override init(frame: CGRect) { 
    super.init(frame: frame) 
    NSBundle.mainBundle().loadNibNamed("Item", owner: self, options: nil) 
    self.view.frame = bounds 
    self.addSubview(self.view) 
}