我创建了一个自定义视图“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
答案 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]];
希望这有帮助