2015-01-12 82 views
0

如何在iOS中以編程方式更改視圖的大小。ios動態改變視圖大小

我開發在目的C.

iOS應用我有幾個被隱藏,並且根據使用下面的方法一定的邏輯示出的觀點:

-(void)hideGroupStats{ 
    [groupTimeToFinishForeText setHidden:YES]; 
    [lblTimeToFinish setHidden:YES]; 
    [groupTimeToFinishBG setHidden:YES]; 
} 

下面他們在我視圖層次結構中存在一個視圖,其中包含「縮放到適合模式」的地圖。但是,當其他視圖隱藏時,它不會調整大小以佔用空間。

我是新來的ios開發,所以我可能會失蹤somting非常簡單。

+0

你只是隱藏你的看法,所以他們消失不刪除從超級觀點!得到它了??因此,相反,隱藏你必須從超級視圖中刪除該視圖,並將其添加回來,因爲你的條件變爲真或假! –

+0

你在使用故事板嗎? – FreeNickname

+0

我正在使用故事板。 –

回答

1

由於每Apple documentation for UIView(見下文節選)調用setHidden:YES時,這並沒有真正消除認爲從它的上海華只會使它消失所以它等價於你仍然無法看到它。有一對夫婦的方法來隱藏視圖,以便您獲得影響你之後,但主要的一個(如說給+1像David Ansermot S)我會與正在改變UIView S架構去

mapView.frame = CGRectMake(newX, newY, newWidth, newHeight); 

newX,newY,newWidthnewHeight都是你設置的變量,以確定UIView的大小和位置。但是我會堅持某種動畫內這條線給用戶提供更好的用戶體驗,所以我個人做這樣的事情:

- (void)showView:(UIView *)view withAnimationForFrame:(CGRect)frame 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 

    view.frame = CGRectMake(frame); 

    [UIView commitAnimations]; 
} 

- (void)hideView:(UIView *)view withAnimationForFrame:(CGRect)frame 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

    view.frame = CGRectMake(frame); 

    [UIView commitAnimations]; 
} 

更改幀大小和/或位置應使其他觀點,即你想縮放就像你想要的那樣自動進行。

Extract from Apple Documentation for UIView

設置該屬性來YES值隱藏在接收器和其設置爲NO示出了接收器。缺省值是NO

隱藏視圖從其窗口中消失,並且不會接收輸入事件。然而,它仍然在其超級瀏覽的子視圖列表中,並像往常一樣參與自動調整。用子視圖隱藏視圖會隱藏這些子視圖和它們可能擁有的任何視圖後代。這種效果是隱含的,不會改變接收者後代的隱藏狀態。

隱藏窗口當前第一響應者的視圖會導致視圖的下一個有效關鍵視圖成爲新的第一響應者。

此屬性的值僅反映接收者的狀態,並沒有考慮視圖層次結構中接收者祖先的狀態。因此,該屬性可以是NO,但是如果隱藏祖先,接收器仍可能隱藏。

+0

謝謝你的迴應。 –

+0

有沒有一種方法來獲取已移除視圖和地圖視圖的高度,以便它可以放大到合適的大小? –

1

您必須添加代碼來調整你的觀點一樣:

mapView.frame = CGRectMake(newX, newY, newWidth, newHeight); 
0

可以直接設置你的視圖等的幀: -

[yourViewObject SETFRAME:CGRectMake(下一頁末,newY,newWidth,newHeight)];

如果你想設置上依賴於任何其他視圖(地圖視圖)視圖的框架,那麼你可以簡單地使用: -

yourviewObj.frame = mapview.frame 

希望這將有助於你