繁体   English   中英

UIView xib在UIViewController中加载问题

[英]UIView xib in UIViewController loading issue

我有3个UIViews (让我们称之为HeaderViewMainViewFooterView )与UIButtonsLabel ,等我已经在各自设立xibs 我已经通过各自.h文件中的IBOutlets连接了元素。 在每个.m文件的drawRect ,我编写了一些设置说明,例如设置文本的颜色,设置UIButton的图像等。我有一个UIViewController ,它是通过按钮click事件显示的。 在此UIViewController ,我已要求loadNib为3个方法UIViews与指定帧。

我现在面临的问题是,没有一个元素被显示,例如,对于一个UIViewsHeaderView ),该buttonlabel所示(选中它通过ViewDebugging ),但imagestexts未设置由于某些原因。

对不起,如果我没有正确解释,但我已经打过电话addSubviewbringSubviewToFrontUIButtonLabelUIViews以及和它只是没有显示出来。 任何帮助都会很棒。 如果有人甚至可以将我引导到正确的方向,那将真的很有帮助。 我一直对此感到沮丧,并迷失了应该做的事情。

非常感谢您的提前帮助!

  1. 使用自动布局类检查天气。

  2. 如果是,请通过禁用它们来尝试一次。

  3. 在ViewDidAppear委托方法中添加视图以添加视图

  4. 或者,如果您不想禁用尺寸类别,则尝试单击按钮添加。

实际上,尺寸类比动态CGRectMake帧在ViewDidAppear之前具有更高的优先级。 在ViewDidAppear之后,优先级进入帧。

请尝试此操作,然后回复是否有效。

                    Thanks

从xib创建视图并将它们添加到视图层次结构时,必须考虑到这一点。

通常,您必须执行以下操作:

@implementation MYViewController 
{
    UIView *_headerView;
    UIView *_mainView;
    UIView *_footerView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    _headerView = [[[UINib nibWithNibName:@"HeaderView" bundle:nil] instantiateWithOwner:nil options:nil] firstObject];
    _mainView = [[[UINib nibWithNibName:@"MainView" bundle:nil] instantiateWithOwner:nil options:nil] firstObject];
    _footerView = [[[UINib nibWithNibName:@"FooterView" bundle:nil] instantiateWithOwner:nil options:nil] firstObject];

    _headerView.translatesAutoresizingMaskIntoConstraints = NO;
    _mainView.translatesAutoresizingMaskIntoConstraints = NO;
    _footerView.translatesAutoresizingMaskIntoConstraints = NO;

    [self.view addSubview:_headerView];
    [self.view addSubview:_mainView];
    [self.view addSubview:_footerView];

    // Set here autolayouts for _headerView, _mainView and _footerView
}
@end

另外,您可以将视图配置为IBOutlets并使用xib的文件所有者来分配视图(通过将页眉,主视图和页脚视图的每个XIB的文件所有者设置为MYViewController类,并将该视图分配给相应文件的所有者IBOutlet属性):

@implementation MYViewController 
{
    IBOutlet UIView *_headerView;
    IBOutlet UIView *_mainView;
    IBOutlet UIView *_footerView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[UINib nibWithNibName:@"HeaderView" bundle:nil] instantiateWithOwner:self options:nil];
    [[UINib nibWithNibName:@"MainView" bundle:nil] instantiateWithOwner:self options:nil];
    [[UINib nibWithNibName:@"FooterView" bundle:nil] instantiateWithOwner:self options:nil];

    _headerView.translatesAutoresizingMaskIntoConstraints = NO;
    _mainView.translatesAutoresizingMaskIntoConstraints = NO;
    _footerView.translatesAutoresizingMaskIntoConstraints = NO;

    [self.view addSubview:_headerView];
    [self.view addSubview:_mainView];
    [self.view addSubview:_footerView];

    // Set here autolayouts for _headerView, _mainView and _footerView
}

@结束

另外,检查您的自动布局/自动调整大小实现,并在视图上添加一些NSLog标志(在-awakeFromNib方法-awakeFromNib )以检查视图是否已加载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM