0

我是一个新手,刚开始制作我的第一个应用程序,而没有遵循书籍或教程。我创建了一个简单的应用程序,它在启动时会显示一个 UITableView,其中包含一个单独的部分,该部分在标题中有一个文本字段,最初没有行。当您在文本字段中输入一些文本时,它会进行 Web API 调用(从 Wikipedia 获取一些 JSON 数据),然后使用调用结果填充表格行。通常,有足够多的结果,表格底部不再显示在屏幕上。一切都很好,直到我尝试滚动表格。发生这种情况时,屏幕右边缘不会出现滚动条,并且表格不会随着我的手指移动以一对一的比例移动。当我松开手指时,表格重新回到顶部,因此文本字段再次位于屏幕顶部 - 所以基本上它的行为方式与在有任何行或足够少的行都适合屏幕之前的行为方式相同。一世在新数据进入后发送到表格视图 -reloadData是否需要向它发送一些其他消息以通知它它的大小已经改变或什么?

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

4

4 回答 4

3

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

于 2012-11-12T19:06:56.493 回答
1

在您的 WTAppDelegate.m 更改 -(BOOL)application:(UIApplication *)application 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)style 和 -(id)init 并添加以下方法

-(void)loadView{
    [super loadView]; 
}
于 2012-11-16T09:22:31.660 回答
0

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

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    tableView.tableHeaderView = [self headerView];
    return 1;
}
于 2012-11-15T18:23:43.103 回答
0

在您的 WTAppDelegate.m 更改 -(BOOL)application:(UIApplication *)application 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)style
  2. -(id)初始化
  3. -(UIView *)headerView
  4. -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
  5. -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

无需添加 loadView 方法。

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

添加

 wordsHeaderView = [[[NSBundle mainBundle] loadNibNamed:@"WordsHeaderView" owner:self options:nil] lastObject];
 self.tableView.tableHeaderView = wordsHeaderView;
于 2012-11-19T06:42:52.787 回答