ios动态更改视图大小

时间:2015-01-12 12:28:00

标签: ios objective-c

如何在iOS中以编程方式更改视图的大小。

我正在开发Objective C中的iOS应用程序。

我有几个隐藏的视图,并根据某个逻辑使用以下方法显示:

-(void)hideGroupStats{
    [groupTimeToFinishForeText setHidden:YES];
    [lblTimeToFinish setHidden:YES];
    [groupTimeToFinishBG setHidden:YES];
} 
在我的视图层次结构中的

下方有一个视图,其中包含“缩放到适合模式”的地图。 但是,当隐藏其他视图时,它不会调整大小以占用空间。

我是ios开发的新手,所以我可能会错过很简单的事情。

3 个答案:

答案 0 :(得分:1)

您必须添加代码才能调整视图大小,如:

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

答案 1 :(得分:1)

根据Apple documentation for UIView(参见下面的摘录)调用setHidden:YES这实际上并没有从它的超视图中删除视图它只是让它消失所以它等同地仍然存在你就是不能看见。有几种方法可以隐藏视图,这样你就可以获得你所追求的效果,但是我要使用的主要方法是改变UIView的帧(如David Ansermot s所说的给定+ 1)

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

更改帧大小和/或位置应使您想要缩放的其他视图自动按您的意愿进行。

<强> Extract from Apple Documentation for UIView

  

将此属性的值设置为YES会隐藏接收器并将其设置为NO,以显示接收器。默认值为NO

     

隐藏视图会从其窗口中消失,并且不会接收输入事件。但它仍保留在超级视图的子视图列表中,并像往常一样参与自动调整。使用子视图隐藏视图会隐藏这些子视图以及它们可能具有的任何视图后代。这种效果是隐含的,不会改变接收者后代的隐藏状态。

     

隐藏作为窗口当前第一响应者的视图会导致视图的下一个有效键视图成为新的第一响应者。

     

此属性的值仅反映接收方的状态,并不考虑视图层次结构中接收方祖先的状态。因此,此属性可以是NO,但如果隐藏了祖先,接收器仍可能被隐藏。

答案 2 :(得分:0)

您可以直接设置视图的框架,如: -

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

如果你想依赖任何其他视图(地图视图)设置视图的框架,那么你可以简单地使用: -

yourviewObj.frame  = mapview.frame

希望这会对你有所帮助