Пользовательский xib UIView не отображается - PullRequest
0 голосов
/ 15 марта 2019

У меня проблема, которая, кажется, не имеет очевидного решения. Я искал вокруг, и я прошел через все распространенные ответы, которые я мог найти.

Мои пользовательские представления xib не отображаются в приложении при запуске. Фон четкий, и у этой xib есть 5 изображений, как вы можете видеть ниже, которые не скрыты.

В классе также есть около 5 делегатов, которые я установил от вызывающей стороны, когда делегаты были инициализированы. Вызывающая сторона initWithDelegates: является родительским UIViewController, который отображает этот xib.

CustomView.h

@interface CustomView : UIView<SomeProtocol>

// UI Items - THESE AREN'T SHOWING UP
@property (strong, nonatomic) IBOutlet UIImageView *image1;
@property (strong, nonatomic) IBOutlet UIImageView *image2;
@property (strong, nonatomic) IBOutlet UIImageView *image3;
@property (strong, nonatomic) IBOutlet UIImageView *image4;
@property (strong, nonatomic) IBOutlet UILabel *label;

@property (strong, nonatomic) IBOutlet UIStackView *centerStackView;

- (id)initWithDelegates:(UIViewController*)delegate1 withDelegate2:(NSObject<Delegate2>*)delegate2 withDelegate3:(NSObject<Delegate3>*)delegate3 withDelegate4:(UIViewController<Delegate4>*)delegate4
    withDelegate5:(NSObject<Delegate5>*)delegate5;

@end

CustomView.m

@implementation CustomView

- (void)awakeFromNib {
    [super awakeFromNib];
}

- (id)initWithDelegates:(UIViewController*)delegate1 withDelegate2:(NSObject<Delegate2>*)delegate2 withDelegate3:(NSObject<Delegate3>*)delegate3 withDelegate4:(UIViewController<Delegate4>*)delegate4
    withDelegate5:(NSObject<Delegate5>*)delegate5
{

    NSArray * arr =[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil];
    self = [arr firstObject];


    self.delegate1 = delegate1;
    self.delegate2 = delegate2;
    self.delegate3 = delegate3;
    self.delegate4 = delegate4;
    self.delegate5 = delegate5;

    [self setLoopImage];

    [self layoutIfNeeded];

    return self;
}
@end

Что еще я проверил:

  1. Я убедился, что файл xib правильно выбран в «Custom Class» в конструкторе интерфейса.
  2. Я просмотрел код, чтобы убедиться в отсутствии сбоев или явных проблем.
  3. Кажется, что xib не имеет каких-либо очевидных проблем в построителе интерфейса, например, установлен в HIDDEN.
  4. 5 IBOutlet ImageViews получают адрес памяти и не равны нулю.

Любая помощь приветствуется!

UPDATE:

Я считаю, что это как-то связано с помещением перьев во вложенный UIView. В построителе интерфейса порядок: UIViewController -> UIView -> nibs

Кажется, не существует метода для регистрации перьев из родительского UIViewController, как в классах, подобных UITableView.

Я также пробовал:

  1. Установка цвета фона в xib, чтобы убедиться, что он появляется. Это не так. Однако, если я установил красный цвет фона в родительском элементе, где я добавил представление в построителе интерфейса, он станет красным. ( См. Рисунок 1 ), а мой файл xib показан в Рисунок 2
  2. Переопределите initWithFrame, чтобы убедиться, что он вызывается. Это называется.
  3. Думая, что представление может быть создано дважды, один с помощью autolayout и один с помощью моего пользовательского метода init, я попытался сделать метод (id)initWithDelegates не init или зарегистрировать nib в случае дублирования объекта. Я сделал это, удалив 1) return self, 2) строки, которые регистрируют перо, и 3) сделать прототип метода возвращаемым недействительным - I.E. (void)initWithDelegates - Это тоже не сработало.
  4. Я попробовал эти строки в initWithDelegates: [self addSubview: self.image1]; [self bringSubviewToFront: self.image1]; [self.menuImage setHidden:image1]; - без удачи.

Рисунок 1: (Фактический результат) Actual

Рисунок 2 (Ожидается .. с красным фоном) Expected

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Я думаю, что-то не так с макетом вашего CustomView внутри ParentView.Не могли бы вы:

  • Проверить фрейм CustomView при добавлении его в ParentView.

  • Проверить ограничения, которые имеют CustomView внутри ParentView.Если у вас их нет - добавьте их, ограничения на iOS помогут решить, как создать свой CustomView.Более подробную информацию об этом вы можете найти здесь Программно создавая ограничения

  • А также вы можете попробовать использовать "Debug View Hierarchy" в Xcode для проверки того, чтона вашем экране вы можете найти свой CustomView в иерархии представлений, и вы увидите, что не так.
0 голосов
/ 15 марта 2019

Проверьте свой Autolayout в вашей пользовательской XIB.Что-то содержимое не показывает из-за этого.Например: только центр по вертикали и центр по горизонтали.Попробуйте применить другое ограничение для автоматического размещения в своем представлении в пользовательском классе.

...