向UITableView添加行后出现意外的滚动行为

时间:2012-11-06 12:40:52

标签: ios uitableview

我刚刚开始制作我的第一个应用程序而没有在书籍或教程中进行操作。我创建了一个简单的应用程序,它在启动时会显示一个UITableView,其中一个部分在标题中有一个文本字段,最初没有行。当您在文本字段中输入一些文本时,它会进行Web API调用(从Wikipedia中获取一些JSON数据),然后使用调用结果填充表行。通常,有足够的结果,表格的底部不再在屏幕上可见。一切都很顺利,直到我尝试滚动表格。当发生这种情况时,屏幕右边缘不会出现滚动条,并且我的手指移动时桌子不会以一对一的比例移动。当我释放我的手指时,表格会快速回到顶部,以便文本字段再次位于屏幕的顶部 - 所以基本上它的行为与行为之前的行为方式相同,或者行数足够多屏幕上。在新数据进入后,我 reloadData发送到表格视图 - 我是否需要向其发送一些其他消息以通知它其大小已更改或其他内容?

编辑:我在MacRumors的论坛上发布了同样的问题以及我的项目文件。如果您认为它可以帮助您,请give it a look并下载项目文件。

4 个答案:

答案 0 :(得分:3)

从WordsHeaderView nib文件中删除“use autolayout”。 单击nib文件,进入“文件检查器”并取消选中“使用autolayout”。 您在标题视图中有一些“锁定”表滚动

的自动布局约束

答案 1 :(得分:1)

在您的WTAppDelegate.m更改 - (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

以下

- (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;
}

然后在WordsViewController.m中注释方法 - (id)initWithStyle:(UITableViewStyle)样式和 - (id)init并添加以下方法

-(void)loadView{
    [super loadView]; 
}

答案 2 :(得分:0)

您没有将其添加为“viewForHeaderInSection”,而是尝试将其设置为“tableHeaderView”。 可能如下。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    tableView.tableHeaderView = [self headerView];
    return 1;
}

答案 3 :(得分:0)

在您的WTAppDelegate.m更改 - (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

以下

- (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

中的以下方法
  1. - (ID)initWithStyle:(UITableViewStyle)式
  2. - (id)init
  3. - (UIView *)headerView
  4. - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
  5. - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
  6. 无需添加loadView方法。

    在WordsViewController.m中添加以下内容 - (void)viewDidLoad

    添加

     wordsHeaderView = [[[NSBundle mainBundle] loadNibNamed:@"WordsHeaderView" owner:self options:nil] lastObject];
     self.tableView.tableHeaderView = wordsHeaderView;