2015-01-12 86 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 

希望这将有助于你