UIView自定义xib不显示

时间:2019-03-14 23:56:01

标签: ios objective-c interface-builder xib

我遇到的问题似乎没有明显的解决方案。我进行了搜索,找到了所有常见的答案。

启动时,我的自定义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 ImageView获得一个内存地址,并且不为空。

感谢您的帮助!

更新:

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

似乎没有像UITableView这样的类中从父UIViewController注册笔尖的方法。

我也尝试过:

  1. 在xib中设置背景色以确保其显示。没有。但是,如果我在接口构建器中添加视图的父级中将背景色设置为红色,它将变为红色。 (见图1 ),我的xib文件显示在图2
  2. 覆盖initWithFrame以确保其被调用。它叫做。
  3. 考虑到视图可以实例化两次,一次通过自动布局,一次通过我的自定义init方法,我尝试使(id)initWithDelegates方法不进行初始化或在复制对象的情况下注册nib。我通过删除1)return self,2)注册笔尖的行和3)使方法原型返回空值的方法来完成此操作-即(void)initWithDelegates-这也不起作用。
  4. 我在initWithDelegates中尝试了以下几行: [self addSubview: self.image1]; [self bringSubviewToFront: self.image1]; [self.menuImage setHidden:image1]; -没有运气。

图1 :(实际结果) Actual

图2(预期..红色背景) Expected

3 个答案:

答案 0 :(得分:0)

在自定义XIB中检查您的自动版式。因此,包含项未显示。例如:仅垂直居中和水平居中。尝试在自定义类的视图中执行不同的自动布局约束。

答案 1 :(得分:0)

我认为CustomView在ParentView中的布局有些问题。您能不能?

  • 在将CustomView的框架添加到ParentView中时对其进行检查。

  • 检查在ParentView内部具有CustomView的约束。如果你不这样做 有它们-添加它,约束将使iOS胶水如何布局您的 CustomView。有关更多信息,请点击Programmatically Creating Constraints

  • 您也可以尝试在Xcode中使用"Debug View Hierarchy" 检查屏幕上发生了什么,在那里您可以找到您的 视图层次结构中的CustomView,您将看到问题所在。

答案 2 :(得分:0)

笔尖不能嵌套在结构中。

代替:

UIViewController -> UIView -> 笔尖..

应该是:

UIViewController -> Container View -> UIView with nibs.