UIView自定义xib没有显示出来

问题描述 投票:0回答:2

我有一个似乎没有明显解决方案的问题。我已经四处寻找,并且我已经找到了我能找到的所有常见答案。

我启动时,我的自定义xib视图不会显示在应用程序上。背景很清晰,这个xib有5个图像视图,如下所示,未设置为隐藏。

该类有大约5个代表,我在初始化代理时从调用者设置。 initWithDelegates:的调用者是显示此xib的父UIViewController。

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文件。
  2. 我已经完成了代码,以确保没有崩溃或明显的问题。
  3. xib在界面构建器中似乎没有任何明显的问题,例如设置为HIDDEN。
  4. 5个IBOutlet ImageViews获取内存地址,但不是零。

任何帮助表示赞赏!

更新:

我相信这与将nib放在嵌套的UIView中有关。在界面构建器中,顺序是UIViewController - > UIView - > nibs

似乎没有一种从父UIViewController注册nib的方法,就像UITableView这样的类。

我也尝试过:

  1. 在xib中设置背景颜色以确保它显示出来。它没有。但是,如果我在接口构建器中添加视图的父级中将背景颜色设置为红色,则它将变为红色。 (参见图1),我的xib文件如图2所示
  2. 过度使用initWithFrame来确保调用它。它被称为。
  3. 认为视图可以实例化两次,一个通过autolayout,一个通过我的自定义init方法,我尝试使(id)initWithDelegates方法不初始化或注册nib以防复制对象。我这样做是通过删除1)return self,2)注册nib的行,以及3)使方法原型返回void - I.E. (void)initWithDelegates - 这也不起作用。
  4. 我在initWithDelegates中尝试了这些行:[self addSubview: self.image1]; [self bringSubviewToFront: self.image1]; [self.menuImage setHidden:image1]; - 没有运气。

图1 :(实际结果)Actual

图2(预期红色背景)Expected

ios objective-c interface-builder xib
2个回答
0
投票

检查自定义XIB中的Autolayout。包含的东西因为它而没有显示。例如:仅垂直居中并水平居中。尝试在自定义类的视图中执行不同的自动布局约束。


0
投票

我认为在ParentView中布局您的CustomView有问题。能否请您:

  • 将CustomView添加到ParentView中时,请检查它的框架。
  • 检查ParentView中具有CustomView的约束。如果您没有它们 - 添加它,iOS将胶合如何布局您的CustomView。有关这方面的更多信息,请访问Programmatically Creating Constraints
  • 此外,您可以尝试在Xcode中使用"Debug View Hierarchy"来检查屏幕上发生的事情,在那里您可以在视图层次结构中找到您的CustomView,您将看到有什么问题。
© www.soinside.com 2019 - 2024. All rights reserved.