gpt4 book ai didi

iOS:弹出窗口中的 UITableView 并看到 "double vision"效果

转载 作者:行者123 更新时间:2023-11-29 02:53:54 24 4
gpt4 key购买 nike

我正在开发一个 iPad 应用程序,在某些时候,我需要显示一个弹出窗口,其中包含可供用户选择的选项。为此,我在 UIPopoverController 中使用了 UITableView。问题是,在 iPad 上(而不是在模拟器上),当滚动 tableview 时,我得到了一种“双重视觉”效果,看起来像是存在两组列表。一种是静止的,一种是上下滚动的。

我这样构造弹出框:

self.fClassTypeList = [[NSMutableArray alloc] init];
[self.fClassTypeList removeAllObjects];

NSUInteger stringLength = 0;
(populate self.fClassTypeList, and set stringLength to the size of the longest entry)

[self setContentSizeForViewInPopover:CGSizeMake(stringLength * 15.0f, [self.fClassTypeList count] * 30)];

CGFloat tableBorderLeft = 5;
CGFloat tableBorderRight = 5;
CGRect viewFrame = self.view.frame;
viewFrame.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table

self.fListOfItems = [[UITableView alloc] initWithFrame:viewFrame style:UITableViewStylePlain];
self.fListOfItems.delegate = self;
self.fListOfItems.dataSource = self;
[self.view addSubview:self.fListOfItems];

我把 View Controller 的 viewDidLayoutSubviews(…) 部分放在了,也许我应该把它放在别的地方?我不确定为什么这会发生在实际机器上,而不是模拟器上。

最佳答案

-viewDidLayoutSubviews 是放置分配的奇怪位置,因为该方法可以被多次调用。因此,就您的主要问题而言,我认为您应该将分配移至 -init 方法,并将布局代码移至您的 -viewWillAppear 方法。

- (id)init
{
self = [super init];
if (self)
{
self.fClassTypeList = [[NSMutableArray alloc] init];

self.fListOfItems = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
self.fListOfItems.delegate = self;
self.fListOfItems.dataSource = self;
[self.view addSubview:self.fListOfItems];
}

return self;
}

- (void )viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

NSUInteger stringLength = 0;

CGFloat tableBorderLeft = 5;
CGFloat tableBorderRight = 5;
CGRect viewFrame = self.view.frame;
viewFrame.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
self.fListOfItems.frame = viewFrame;

[self setContentSizeForViewInPopover:CGSizeMake(stringLength * 15.0f, [self.fClassTypeList count] * 30)];
}

这促进了更好的内存管理。

作为额外的奖励,我建议您重构[self setContentSizeForViewInPopover:CGSizeMake(stringLength * 15.0f, [self.fClassTypeList count] * 30)]; 方法转换为 fClassTypeList 的 setter 方法。更好的方法是在同一个 setter 方法中简单地调用 -viewWillAppear:。当您(或其他人)稍后继续构建此代码时,这将促进良好的可伸缩性。

很难看出您究竟想在这段代码中完成什么,因为它是硬编码的,所以如果我遗漏了您正在寻找的标记(并解释原因),请告诉我,我'我会进行编辑。

干杯

关于iOS:弹出窗口中的 UITableView 并看到 "double vision"效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152364/

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