Я пытаюсь создать многократно используемый UIView в Swift, который я могу подключить к своим контроллерам просмотра Storyboard. Моя ключевая проблема прямо сейчас заключается в том, что многопользовательский «виджет» UIView не полностью вписывается в поле UIView в раскадровке. Я последовал this tutorial настроить многоразовый UIView виджетSwift: многоразовый UIView в ограничениях раскадровки и размера
Создан подкласс UIView и соответствующего .xib - и подключен этот:
import UIKit class MyWidgetView: UIView { @IBOutlet var view: UIView!; required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder); NSBundle.mainBundle().loadNibNamed("MyWidgetView", owner: self, options: nil); self.addSubview(self.view); } }
В XIB, что файл интерфейс в соответствии с приведенным выше кодом, я использовал UIView с размером Freeform в режиме Simulated Metrics и Scale to Fill under View.
В главном раскадровку, я добавил UIView блок (такой же прямоугольной формы) и изменил класс для MyWidgetView
Он работает, но компоненты я создал в XIB взгляд сплющенные в самом приложении, несмотря на тот факт, что я использовал ограничения компоновки как в XIB, так и в основной раскадровке.
Посмотреть скриншот. Розовая часть не должна появляться, так как это только цвет UIVIew на главной раскадровке, которую я добавил, чтобы проверить размер. Этот UIView на самом деле является MyWidgetView (после того, как я изменил класс на шаге 3. Итак, теоретически, поскольку MyWidgetView == UIView на главной раскадровке и что UIView имеет ограничения, которые делают его прямоугольным в супервизоре, тогда почему мой виджет сжимается? синяя часть ниже должна распространяться весь путь правильный.
Хорошо, я попробую это. У меня XCode 7 beta 5 и Swift 2.0, поэтому я могу загружать приложения на своем устройстве, не переходя через подписку Apple на 99 долларов. –
Впечатляющий ... это работает. Можете ли вы объяснить немного больше, как это работает? Особенно вокруг «nibRoot» - не уверен, что я полностью понимаю эту часть. –
Рад, что это работает! Как описано в [официальном документе] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/NSBundle_UIKitAdditions/#//apple_ref/occ/instm/NSBundle/loadNibNamed :owner:options :), возвращаемое значение 'NSBundle.loadNibNamed()' is ** Массив, содержащий объекты верхнего уровня в файле nib **.В нашем случае есть только один объект верхнего уровня: вид, содержащий всю вашу иерархию представлений 'MyWidgetView'. Итак, после успешного вызова 'loadNibNamed' мы выбрали первое и единственное представление как' nibRoot' и добавили его как подвью. – southp