gpt4 book ai didi

ios - 隐藏 View 而不留间隙

转载 作者:行者123 更新时间:2023-11-29 13:19:02 25 4
gpt4 key购买 nike

我正在尝试在 ScrollView (由段控件触发)中的两个部分( View )之间切换可见性,问题是我不想要隐藏元素所在的间隙。

目前我正在做的是在 ViewDidAppear 中,我正在存储两个 View 框架,然后当我需要切换 View 的可见性时,我正在设置我想隐藏的 View frame 到 CGRecZero 并将另一个 View 移动到“顶部”位置,方法是将它的 frame 设置为其初始 frame 并修改其 origin.y 属性。问题是,一旦我滚动, View 的框架似乎就被重置了,我留下了一个空白。

这是我的代码示例

if (control.selectedSegmentIndex == 0) {
[self.firstView setHidden:YES];
[self.firstView setFrame:CGRectZero];
[self.secondView setHidden:NO];
CGRect frmTmp = secondViewRec;
frmTmp.origin.y = orgPoint.y;
[self.secondView setFrame:frmTmp];

} else {
[self.secondView setHidden:YES];
self.secondView.frame = CGRectZero;
[self.firstView setHidden:NO];
CGRect frmTmp = firstViewRec;
firstViewRec.origin.y = orgPoint.y;

self.firstView.frame = frmTmp;
}

我不打算直接使用 ScrollView ,我也尝试过使用静态 UITableView 并隐藏单元格,但我再次在界面中留下了空白,这就是我为什么尝试这种方法。有什么建议么?是否有更简单的方法来实现这一点?

最佳答案

我解决这个问题的方法是在父 View 中附加和删除 View 。我的父 View 是 ScrollView 。这是我的代码的一些黑客复制粘贴:

#define LIST_BUTTON_INDEX      0
#define LOCATION_BUTTON_INDEX 1
#define ACTIVITIES_DETAIL_MODE_DETAILS 0
#define ACTIVITIES_DETAIL_MODE_MAP 1

-(void)detailsButtonPressed:(id)sender
{
[self selectButton:LIST_BUTTON_INDEX]; // change the segment control
[self displayView:ACTIVITIES_DETAIL_MODE_DETAILS];
}
-(void)mapButtonPressed:(id)sender
{
[self selectButton:LOCATION_BUTTON_INDEX]; // change the segment control
[self displayView:ACTIVITIES_DETAIL_MODE_MAP];
}


-(void) displayView:(int)displayMode
{
self.mode = displayMode;

switch (self.mode)
{
case ACTIVITIES_DETAIL_MODE_DETAILS:
{
[self clearScrollViewSubviews];

self.detailsController = [[ActivityDetailsView alloc] initWithNibName:@"ActivityDetailsView" bundle:[NSBundle mainBundle]];
[self.scrollView addSubview:self.detailsController.view];
CGRect f = self.detailsController.view.frame;
f.size.height -= 20;
self.scrollView.contentSize = f.size;
}
break;

case ACTIVITIES_DETAIL_MODE_MAP:
{
[self clearScrollViewSubviews];
self.mapController = [[ActivityMap alloc] initWithNibName:@"ActivityDetailsLocationView" bundle:[NSBundle mainBundle]];
[self.scrollView addSubview:self.mapController.view];
CGRect f = self.mapController.view.frame;
f.size.height -= 20;
self.scrollView.contentSize = f.size;
}
break;
}

}
-(void)clearScrollViewSubviews
{
if(self.detailsController != nil)
{
[self.detailsController.view removeFromSuperview];
}
if(self.mapController != nil)
{
[self.mapController.view removeFromSuperview];
}
}

关于ios - 隐藏 View 而不留间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14843195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com