簡體   English   中英

iOS動態更改視圖大小

[英]ios change size of view dynamically

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

我正在用Objective C開發iOS應用。

我使用以下方法根據一定的邏輯隱藏和顯示了幾個視圖:

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

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

我是ios開發的新手,所以我可能會錯過很簡單的Somming。

您必須添加代碼來調整視圖的大小,例如:

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

根據Apple的UIView文檔 (請參見下面的摘錄),在調用setHidden:YES ,實際上並不會setHidden:YES視圖中刪除該視圖,只是使它消失了,因此它仍然存在,您只是看不到它。 有兩種方法可以隱藏視圖,以便獲得想要的效果,但我要使用的主要方法是更改UIView的框架(如給定+1的David Ansermot

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

newXnewYnewWidthnewHeight您設置的地方確定的大小和位置都存在變數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];
}

更改框架的大小和/或位置應使您想要縮放的其他視圖自動執行。

從Apple文檔中提取UIView

將此屬性的值設置為YES將隱藏接收器,將其設置為NO顯示接收器。 默認值為NO

隱藏的視圖從其窗口消失,並且不接收輸入事件。 但是,它仍保留在其父視圖的子視圖列表中,並照常參與自動調整大小。 用子視圖隱藏視圖會隱藏這些子視圖以及它們可能具有的任何視圖后代。 此效果是隱式的,不會更改接收者后代的隱藏狀態。

隱藏作為窗口當前第一響應者的視圖將導致該視圖的下一個有效鍵視圖成為新的第一響應者。

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

您可以像這樣直接設置視圖的框架:

[yourViewObject SetFrame:CGRectMake(newX,newY,newWidth,newHeight)];

如果您想將視圖的框架設置為依賴於其他任何視圖(地圖視圖),則可以使用:-

yourviewObj.frame  = mapview.frame

希望這對您有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM