2016-02-13 19 views
0

我有在故事板的用戶界面元素的設置,事情都出現了細小一個UIViewController。現在我在單獨的xib,.h和.m文件中創建了一個新的UIView,我將其稱爲「覆蓋」;然後我呈現覆蓋應低於面面俱到,使得僅覆蓋可以看出:問題,在一個UIViewController呈現外部的UIView:網點不顯示

// in controller.m 
OverlayView *overlayView = [[OverlayView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
overlayView.layer.zPosition = 1000; 
[self.view addSubview:overlayView]; 

疊加顯示在一個奇怪位置(它的頂部是一些50像素遠離導航欄的底部)。而且,除了疊加層的背景之外,疊加層中沒有元素可以被看到。這只是一張空白的紅色畫布。我有雙重檢查的elemenets'阿爾法值是1,它們被設置爲不隱藏,而且他們也都在疊加的initWithFrame明確設置:

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.backgroundColor = [UIColor redColor]; // red canvas shows up 
     self.title.textColor = [UIColor blackColor]; // title can't be seen; why not? 
     self.body.textColor = [UIColor blackColor]; // body can't be seen; why not? 
    } 
    return self; 
} 

我不直接把覆蓋的原因在控制器的XIB,然後簡單地改變它的hidden屬性的是,這是疊加到由多個控制器來使用,並且我想再次使用,因而把它作爲一個單獨的視圖。

我在做什麼錯?

回答

0

父視圖(視圖控制器的視圖)是RESPONSABLE設置子視圖的幀。如果您使用自動佈局,你需要使用setTranslateAutoresizingMaskIntoConstraintsNO和代碼添加所需的約束。請記住,在調用viewDidLayoutSubviews後,孩子的框架將被設置。 如果你不使用自動佈局使用setFrame方法viewWillAppear剛剛設置的框架。

+0

嗨,感謝您的迴應,只是想仔細檢查我的理解正確:我們在這裏談論一個控制器和兩個視圖,第一個視圖是我在故事板中設置的控制器自己的視圖,第二個視圖是這個覆蓋我想介紹控制器自己的觀點。那麼你在這裏談論哪個孩子的觀點? – SeaJelly

+0

另外,你是否暗示我把'[self.view addSubview:overlayView];'viewWillAppear中的邏輯?我已經試過了,結果是一樣的。當我調用'initWithFrame'時,該框架已經設置好了。 – SeaJelly

+0

不,應該在viewDidLoad中添加視圖。在viewWillAppear你可以訪問或更改框架,如果你需要,如果你沒有使用自動佈局。如果您使用自動佈局,則應在視圖添加到viewDidLoad中時添加約束,並且不要混淆幀,並且只能在viewDidLayoutSubviews中訪問該幀。有鑑於此,我不認爲框架已經確定。同樣,如果您使用或不使用自動佈局,這一點非常重要。 –

0

事實證明,我不得不認爲自己initWithFrame內加載筆尖。

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    id mainView; 
    if (self) { 
     NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"MyOverlayView" owner:self options:nil]; 
     mainView = [subviewArray objectAtIndex:0]; 
    } 
    return mainView; 
} 

- (void)awakeFromNib { 
    [super awakeFromNib]; 
} 

上面的代碼固定它。

相關問題