繁体   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