UIView xib在UIViewController加载问题

时间:2015-08-17 12:03:26

标签: ios objective-c uiview uiviewcontroller

我有3个UIViews(让我们称之为HeaderViewMainViewFooterView)与我UIButtonsLabel等在各自的xibs中设置。我已通过相应IBOutlets文件中的.h连接元素。在每个.m文件'drawRect中,我编写了一些设置说明,例如设置文本的颜色,设置UIButton的图像等。 我有一个UIViewController,它是通过按钮点击事件呈现的。在此UIViewController中,我为指定框架的3 loadNib调用了UIViews个方法。

我面临的问题是没有显示任何元素,例如,UIViewsHeaderView),button和{{1}之一}已显示(通过label检查),但ViewDebuggingimages由于某种原因未设置。

如果我没有正确解释,我很抱歉,但我尝试为textsaddSubview拨打bringSubviewToFrontUIButton Label以及它只是没有出现。任何帮助都会很棒。如果有人能指引我朝着正确的方向前进,那将会非常有帮助。我一直很沮丧地坚持这一点,并且对于我应该做的事情感到很遗憾。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

  2. 如果是,请尝试禁用它们。

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

  4. 如果您不想禁用尺寸类,请尝试按下按钮添加..

  5. 实际上,大小类比ViewDidAppear之前的动态CGRectMake帧具有更高的优先级。在ViewDidAppear优先级转到帧之后。

    。请试试这个并回复是否有效。

                        Thanks
    

答案 1 :(得分:0)

您必须考虑何时从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
}

@end

另外,检查你的autolayout / autoresize实现并在你的视图上添加一些NSLog标志(在方法-awakeFromNib上)以检查是否加载了视图。