2015-10-13 105 views
0

我創建了一個自定義視圖「HelpNaviView」,並向它添加了一個xib文件。一切正常,但顯示尺寸錯誤。 這裏是我的代碼:關於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]; 

而且printInfo:

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

有什麼不對?您在initWithFrame方法 –

+0

GUESS中將幀設置爲(0,0,screen_width,64),灰色區域應填充整個屏幕寬度。 - 標籤能否涵蓋你的觀點?什麼是自我和其他子視圖涉及 –

+0

@SaurabhPrajapati是的,你可以看看我的模擬器圖像,顯示大小是(150.0,131.0),而不是(375,64) –

回答

0

這個問題似乎是你對於寬度使用常量:SCREEN_WIDTH。 它應該是:

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

也給init從viewWillAppear中或viewDidAppear,不viewDidLoad中該自定義視圖是很重要的。

+0

」是不是有錯? –

+0

不要在iOS中使用定義標籤。它們不安全,所以應該避免它作爲瘟疫。 – dirtydanee

+0

我走了一步,然後發生了一些令人難以置信的變化。寬度是正常的,但高度仍然是錯誤的。你能告訴我更多細節的原因嗎?高度怎麼樣? –

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 =幀(0,0,[UIScreen mainScreen] .bounds.size.width,64); 代替上述行,你可以

+0

我的「SCREEN_WIDTH」從「#define SCREEN_WIDTH([UIScreen mainScreen] .bounds.size.width)」,這裏有什麼區別嗎? –

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]]; 

希望這有助於

+0

我設置了「translatesAutoresizingMaskIntoConstraints = NO」,並在xib中創建子視圖約束,但仍顯示錯誤的大小。 –

+0

您是否在HelpNaviView中添加約束?你應該在HelpNaviView的實例和它的超級視圖之間設置約束。你有沒有嘗試下面的代碼? – Doro