Резюме
Файлы Nibs / .xib и раскадровки - это файлы Interface Builder, которые используются для визуального создания пользовательского интерфейса для приложений iOS и Mac в Xcode (я буду использовать терминологию iOS для классов, так как этот вопрос помечен как iOS, но также относится к Программирование на Mac).
Отличия
Перья предназначены для использования с одним UIView
. Они также могут быть подключены к подклассу UIViewController
, установив класс Владельца файла на любой подкласс UIViewController
и подключив выходное представление (перетащите для подключения с помощью Инспектора соединений в крайней правой панели XCode).
Раскадровки должны содержать пользовательский интерфейс для 1 или более UIViewController
. Вы можете создать весь пользовательский интерфейс в одной раскадровке или разделить его на более мелкие части.
Преимущества
Раскадровки всегда следует использовать в пользу файлов .xib / Nibs (для контроллеров представления). Раскадровки имеют больше функций и активно разрабатываются Apple.
Каждый аргумент в пользу Nibs основан на том факте, что они использовались индивидуально, в то время как раскадровки содержат много сцен. Вы можете использовать одну раскадровку для каждого UIViewController
так же легко, как и для Nibs (см. Примеры кода ниже). Продолжайте читать для подробного объяснения и примеров кода.
* * Подробное тысячу двадцать-один * * тысяча двадцать-дв
Почему Storboards превосходят Nibs?
Ответ в основном сводится к тому, что Apple поощряет использование раскадровок и прилагает к ним больше усилий при разработке.
- Раскадровки имеют возможность масштабирования, которой нет у Nibs. Серьезно, вы вообще не можете увеличивать масштаб изображения в Nibs, которые отстой при проектировании больших экранов на маленьком ноутбуке.
- В перьях отсутствуют ключевые функции, такие как:
- Прототип и динамические ячейки для
UITableView
( подробнее )
- Свойство top layout свойство (см. Комментарий)
- Возможно, есть еще что-то, пожалуйста, отредактируйте или прокомментируйте, если вам есть что добавить в этот список
- Вам не нужно возиться с установкой класса владельца файла.
Основной аргумент против раскадровок заключается в том, что наличие всех ваших контроллеров представлений в одном месте приводит к конфликтам слияния, медленному Xcode, медленному времени сборки и является общей проблемой при обслуживании. Следовательно, общий совет - использовать перо для каждого UIViewController
.
Но ... Вы можете просто создать раскадровку для каждого UIViewController
. Обычная практика (по крайней мере для меня) - скрывать всю инициализацию UIViewController в методе класса (поскольку никакой другой класс не должен знать имя файла, в котором находится Nib / Storyboard контроллера).
Давайте сравним фрагменты кода, которые можно использовать для создания такого метода. Одна строка кода - это полная разница между ними.
Objective-C
Раскадровка
+ (ViewController *)create
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"ViewController" bundle:nil];
return [storyboard instantiateInitialViewController];
}
Nib
+ (ViewController *)create
{
return [super initWithNibName:@"ViewController" bundle:nil];
}
Использование
- (void)showMyViewController
{
ViewController *vc = [ViewController create];
[self presentViewController:vc animated:YES completion:nil];
}
Swift
Раскадровка
static func create() -> ViewController {
let storyboard = UIStoryboard(name: "ViewController", bundle: NSBundle.mainBundle())
return storyboard.instantiateInitialViewController() as! ViewController
}
Nib
static func create() -> ViewController {
return ViewController(nibName: "ViewController", bundle: nil)
}
Использование
func showMyViewController() {
let vc = ViewController.create()
self.presentViewController(vc, animated: true, completion: nil)
}
Аргументы
Я рассмотрю все обычные аргументы для перьев; как я упоминал ранее, в основном это отдельные файлы, а не аргументы для Nibs над раскадровками
- Команды и слияния
Аргумент: наличие раскадровки с большим количеством контроллеров представления
вызвать конфликты слияния, если вы работаете в команде с несколькими
люди, делающие изменения
Ответ: Одна раскадровка вызывает не больше конфликтов слияния, чем один Nib
- Сложность
Аргумент: Очень сложные приложения имеют много сцен в раскадровке, что приводит к гигантской раскадровке, которая загружается вечно и едва понятна из-за своего размера.
Ответ: Это замечательный момент, но вы можете легко разбить раскадровки на более мелкие части. Ссылки на раскадровку выглядят как отличная функция, которую можно использовать для связывания раскадровок, но они доступны только в Xcode 7 / iOS 9+.Кроме того, до сих пор нет причин выбирать отдельные перья вместо раскадровок.
Возможность повторного использования Аргумент: Создание пера для каждого подкласса UIViewController
позволяет повторно использовать код, поэтому вам не нужно настраивать все свои ограничения и выходы для каждой сценыв вашей раскадровке.
Ответ: Опять же, нет причины выбирать отдельные перья над отдельными раскадровками.