Ios 将行添加到UITableView后出现意外的滚动行为
我是一个新手,刚开始制作我的第一个应用程序,没有在书或教程中跟随。我创建了一个简单的应用程序,它在启动时显示一个UITableView,其中有一个单独的部分,标题中有一个文本字段,最初没有行。当您在文本字段中输入一些文本时,它会进行web API调用(从Wikipedia获取一些JSON数据),然后用调用结果填充表行。通常,有足够多的结果使得表格底部在屏幕上不再可见。一切都很好,直到我尝试滚动表格。当这种情况发生时,屏幕的右边缘不会出现滚动条,并且桌子不会随着我的手指移动而以一对一的比例移动。当我松开手指时,表格会弹回到顶部,因此文本字段再次位于屏幕顶部-因此基本上,在屏幕上出现任何行或足够少的行之前,它的行为方式与它的行为方式相同。新数据输入后,我正在向表视图发送Ios 将行添加到UITableView后出现意外的滚动行为,ios,uitableview,Ios,Uitableview,我是一个新手,刚开始制作我的第一个应用程序,没有在书或教程中跟随。我创建了一个简单的应用程序,它在启动时显示一个UITableView,其中有一个单独的部分,标题中有一个文本字段,最初没有行。当您在文本字段中输入一些文本时,它会进行web API调用(从Wikipedia获取一些JSON数据),然后用调用结果填充表行。通常,有足够多的结果使得表格底部在屏幕上不再可见。一切都很好,直到我尝试滚动表格。当这种情况发生时,屏幕的右边缘不会出现滚动条,并且桌子不会随着我的手指移动而以一对一的比例移动。当
reloadData
——是否需要向其发送其他消息,通知其大小已更改或其他信息
编辑:我在MacRumors的论坛上发布了同样的问题,还有我的项目文件。如果您认为项目文件可以帮助我,请下载项目文件。从WordsHeaderView nib文件中删除“使用自动布局”。
单击nib文件,进入“文件检查器”并取消选中“使用自动布局”。
在页眉视图中有一些自动布局约束,“锁定”表格滚动从WordsHeaderView nib文件中删除“使用自动布局”。
单击nib文件,进入“文件检查器”并取消选中“使用自动布局”。
页眉视图中有一些自动布局约束,“锁定”表格滚动,而不是将其添加为“ViewForHeaderSection”,是否尝试将其设置为“tableHeaderView”。
可能如下
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
tableView.tableHeaderView = [self headerView];
return 1;
}
您是否尝试将其设置为“tableHeaderView”,而不是将其添加为“viewForHeaderInSection”。
可能如下
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
tableView.tableHeaderView = [self headerView];
return 1;
}
在WTAppDelegate.m中,更改-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项 追随
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WordsViewController *viewController = [[WordsViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[[self window] setRootViewController:navController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WordsViewController *viewController = [[WordsViewController alloc] init];
[[self window] setRootViewController:viewController];
[self.window makeKeyAndVisible];
return YES;
}
然后在WordsViewController.m中注释方法-(id)initWithStyle:(UITableViewStyle)style和-(id)init,并添加以下方法
-(void)loadView{
[super loadView];
}
在WTAppDelegate.m中,更改-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项 追随
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WordsViewController *viewController = [[WordsViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[[self window] setRootViewController:navController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WordsViewController *viewController = [[WordsViewController alloc] init];
[[self window] setRootViewController:viewController];
[self.window makeKeyAndVisible];
return YES;
}
然后在WordsViewController.m中注释方法-(id)initWithStyle:(UITableViewStyle)style和-(id)init,并添加以下方法
-(void)loadView{
[super loadView];
}
在WTAppDelegate.m中,更改-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项 追随
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WordsViewController *viewController = [[WordsViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[[self window] setRootViewController:navController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WordsViewController *viewController = [[WordsViewController alloc] init];
[[self window] setRootViewController:viewController];
[self.window makeKeyAndVisible];
return YES;
}
注释掉WordsViewController.m中的以下方法
在WTAppDelegate.m中,更改-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项 追随
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WordsViewController *viewController = [[WordsViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[[self window] setRootViewController:navController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WordsViewController *viewController = [[WordsViewController alloc] init];
[[self window] setRootViewController:viewController];
[self.window makeKeyAndVisible];
return YES;
}
注释掉WordsViewController.m中的以下方法
当您说“填充表行”时,代码中实际发生了什么?(通常,有一种数组为表提供数据。如果向数组中添加新对象并调用
reloadData
,它通常“正常工作”…前提是您的表数据源方法返回正确的内容。)是的,我基本上有一个NSArray保存行的数据,以及tableView:cellforrowatinexpath:
的一个实现,它为数组中的每个对应项逐条输出一个单元格。MyConnectionIDFinishLoading:
实现解析获取的数据并用它填充数据数组。当您说“填充表行”时,代码中实际发生了什么?(通常,有一种数组为表提供数据。如果向数组中添加新对象并调用reloadData
,它通常“正常工作”…前提是您的表数据源方法返回正确的内容。)是的,我基本上有一个NSArray保存行的数据,以及tableView:cellforrowatinexpath:
的一个实现,它为数组中的每个对应项逐条输出一个单元格。我的connectiondFinishLoading:
实现解析提取的数据并用它填充数据数组。我在“文件检查器”窗格下找到了复选框,而不是“标识检查器”,但取消选中该框后,一切正常。谢谢,享受你的+50!我会去做一些研究,看看这个复选框到底在做什么,这样以后就不会难倒我了。我在“文件检查器”窗格下找到了该复选框,而不是“身份检查器”,但在取消选中该复选框后,一切都如期进行。谢谢,享受你的+50!我会去做一些研究,看看这个复选框到底在做什么,这样以后就不会让我难堪了。如果我不需要UINavigationController,为什么我要实现一个UINavigationController呢?这只是一种标准做法还是什么?另外,loadView JU的实现不是很简单吗