关于使用Xib的自定义视图的一些信息

时间:2015-10-13 11:40:12

标签: ios objective-c

我创建了一个自定义视图“HelpNaviView”,并向其添加了一个xib文件。一切正常,但显示大小错误。 这是我的代码:

- (instancetype) initWithFrame:(CGRect)frame WithTitle:(NSString*)title AndSuperVC:(UIViewController*)superVC{
    NSArray*array=[[NSBundle mainBundle]loadNibNamed:@"HelpNaviView" owner:nil options:nil];
    self=array[0];
    NSLog(@"array%@",array);
    self.frame=Frame(0, 0, SCREEN_WIDTH, 64);
    self.titleLabel.text=title;
    self.superVC=superVC;
    return self;
}

...

HelpNaviView*navi=[[HelpNaviView alloc]initWithFrame:ZeroRect WithTitle:@"历史反馈" AndSuperVC:self];
NSLog(@"navi%@",navi);
[self.view addSubview:navi];

并打印信息:

array(
    "<HelpNaviView: 0x7feb830ce180; frame = (0 0; 375 64); autoresize = W+H; layer = <CALayer: 0x7feb830ec980>>"
)
2015-10-13 19:34:12.275 RLCementEBusiness[32071:1778329] navi<HelpNaviView: 0x7feb830ce180; frame = (0 0; 375 64); autoresize = W+H; layer = <CALayer: 0x7feb830ec980>>

但显示图像是: Simulator Image

3 个答案:

答案 0 :(得分:0)

问题似乎是你使用宽度的常量:SCREEN_WIDTH。 它应该是:

self.frame = CGRectMake(0,0, superVC.view.frame.width, 64)

同样重要的是从viewWillAppear或viewDidAppear启动此自定义视图,而不是viewDidLoad。

答案 1 :(得分:0)

更改此行。

self.frame=Frame(0, 0, [UIScreen mainScreen].bounds.size.width, 64);

//不要在viewDidLoad方法中调用下面的行。因为在创建视图之前,您无法设置框架。

HelpNaviView*navi=[[HelpNaviView alloc]initWithFrame:ZeroRect WithTitle:@"历史反馈" AndSuperVC:self];
NSLog(@"navi%@",navi);
[self.view addSubview:navi];

最好避免这种情况       self.frame = Frame(0,0,[UIScreen mainScreen] .bounds.size.width,64); 而不是上面的行,你可以在nib文件中设置框架

答案 2 :(得分:0)

如果您使用自动布局,则应为子视图提供自己的约束,因为默认约束与预期不同

手动添加约束

navi.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview: navi];

NSDictionary *views = @{@"navi": navi};

[self addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"H:|[navi]|"
                      options:0
                      metrics:nil
                      views:views]];

[self addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"V:|[navi]"
                      options:0
                      metrics:nil
                      views:views]];

[navi addConstraint:[NSLayoutConstraint constraintWithItem:navi
                                                 attribute:NSLayoutAttributeHeight
                                                 relatedBy:NSLayoutRelationEqual
                                                    toItem:nil
                                                 attribute:NSLayoutAttributeNotAnAttribute
                                                multiplier:1.0 
constant:64]];

希望这有帮助