ios动态更改视图大小

ios动态更改视图大小,ios,objective-c,Ios,Objective C,如何在iOS中以编程方式更改视图的大小 我正在用Objective C开发一个iOS应用程序 我有两个视图,它们是使用以下方法根据特定逻辑隐藏和显示的: -(void)hideGroupStats{ [groupTimeToFinishForeText setHidden:YES]; [lblTimeToFinish setHidden:YES]; [groupTimeToFinishBG setHidden:YES]; } 在我的视图层次结构中,它们下面有一个视图,

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

我正在用Objective C开发一个iOS应用程序

我有两个视图,它们是使用以下方法根据特定逻辑隐藏和显示的:

-(void)hideGroupStats{
    [groupTimeToFinishForeText setHidden:YES];
    [lblTimeToFinish setHidden:YES];
    [groupTimeToFinishBG setHidden:YES];
} 
在我的视图层次结构中,它们下面有一个视图,其中包含一个带有“缩放到适合模式”的地图。 但是,当其他视图被隐藏时,它不会调整大小以占用空间


我是ios开发新手,因此可能会错过非常简单的somting。

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

mapView.frame = CGRectMake(newX, newY, newWidth, newHeight);
根据调用
setHidden:YES
时的(请参见下面的摘录),这实际上并不会将视图从其超级视图中移除,它只是使视图消失,因此它仍然在那里,您只是看不到它。有两种方法可以隐藏视图,以便获得所需的效果,但我要使用的主要方法是更改
UIView
s帧(如
David Ansermot
s,如给定+1所示)

newX
newY
newWidth
newHeight
都是您在某处设置的变量,用于确定
ui视图的大小和位置。不过,我会将这句话放在某种动画中,为用户提供更好的用户体验,因此我个人会做一些类似的事情:

- (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];
}
更改帧大小和/或位置应使要缩放的其他视图自动执行所需操作

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

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

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

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


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

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

如果您想在任何其他视图(地图视图)上设置视图的框架,则只需使用:-

yourviewObj.frame  = mapview.frame

希望这将对您有所帮助

您只是隐藏了您的视图,所以它们不会从superview中删除!!知道了??因此,您必须从superview中删除该视图,并在条件变为真或假时将其添加回superview!你在使用故事板吗?我在使用故事板。我尝试过[groupTimeToFinishBG removeFromSuperview]@用户2552795,则不用手动设置边框,使用起来应该更方便。感谢您的回复。是否有方法获取已删除视图和地图视图的高度,以便将其放大到正确的大小?
yourviewObj.frame  = mapview.frame