我正在做一个表视图,当显示1-10行时,一切正常。但是,添加10行以上时。它正在构建,但是在模拟器中,它仅显示10行。

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.greekLetters=
    @[@"CHEM 1100",@"CHEM 2100 ",@"CHEM 3415W",@"CHEM 3511",@"CHEM 3521",@"CHEM 4600",@"PHYS 1150",@"PHYS 2150",@"MATH 1201",@"MATH 1206",@"Adv courses",@"CHEM 2700"];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [self.greekLetters count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *SimpleIdentifier=@"SimpleIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: SimpleIdentifier];

    if (cell ==nil) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:SimpleIdentifier];
    }
    cell.textLabel.text=self.greekLetters[indexPath.row];

    if(indexPath.row==0) cell.detailTextLabel.text=@"General Chemistry I";
    if(indexPath.row==1) cell.detailTextLabel.text=@"General Chemistry II";
    if(indexPath.row==2) cell.detailTextLabel.text=@"Analytical Chemistry";
    if(indexPath.row==3) cell.detailTextLabel.text=@"Organic Chemistry I";
    if(indexPath.row==4) cell.detailTextLabel.text=@"Organic Chemistry II";
    if(indexPath.row==5) cell.detailTextLabel.text=@"Physical Chemistry(HP)";
    if(indexPath.row==6) cell.detailTextLabel.text=@"General Physics I";
    if(indexPath.row==7) cell.detailTextLabel.text=@"General Physics II";
    if(indexPath.row==8) cell.detailTextLabel.text=@"Calculus I";
    if(indexPath.row==9) cell.detailTextLabel.text=@"Calculus II";
    if(indexPath.row==10) cell.detailTextLabel.text=@"pick 5 creit";
    if(indexPath.row==11) cell.detailTextLabel.text=@"Introduction to Inorganic Chemistry";

    return cell;

}

-(NSIndexPath *) tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{

        return indexPath;

    }

是我的代码还是模拟器的问题?是因为当我将Tableview放在滑板上时,那里有些东西不对吗?

最佳答案

有两个问题之一。 UITableViewDataSource方法存在问题(似乎不是这种情况),或者表视图本身的大小不正确。

对于第二种情况(表视图已放置在视图控制器的视图上,但大小错误),有两种诊断方法。老式的技术是在调试器中运行程序,暂停执行,然后在po [[UIWindow keyWindow] recursiveDescription]提示符下输入(lldb):

(lldb) po [[UIWindow keyWindow] recursiveDescription]
<UIWindow: 0x7b7956b0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x7b795b30>; layer = <UIWindowLayer: 0x7b795670>>
   | <UIView: 0x7c943380; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x7c9434f0>>
   |    | <UITableView: 0x7d064a00; frame = (0 0; 600 600); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7c941de0>; layer = <CALayer: 0x7c93d3f0>; contentOffset: {0, 0}; contentSize: {600, 528}>
   |    |    | <UITableViewWrapperView: 0x7c942830; frame = (0 0; 600 600); gestureRecognizers = <NSArray: 0x7c942df0>; layer = <CALayer: 0x7c942b30>; contentOffset: {0, 0}; contentSize: {600, 600}>
   |    |    |    | <UITableViewCell: 0x7c955b50; frame = (0 484; 600 44); text = 'CHEM 2700'; autoresize = W; layer = <CALayer: 0x7c955ce0>>
   |    |    |    |    | <UITableViewCellContentView: 0x7c955d30; frame = (0 0; 600 43.5); gestureRecognizers = <NSArray: 0x7c955f40>; layer = <CALayer: 0x7c955da0>>
   |    |    |    |    |    | <UITableViewLabel: 0x7c955f90; frame = (15 12; 93 20.5); text = 'CHEM 2700'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7c956050>>
   |    |    |    |    |    | <UITableViewLabel: 0x7c9562c0; frame = (314.5 12; 270.5 20.5); text = 'Introduction to Inorganic...'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7c956380>>
   |    |    |    |    | <_UITableViewCellSeparatorView: 0x7c956680; frame = (15 43.5; 585 0.5); layer = <CALayer: 0x7c956700>>
   |    |    |    | ...

如果您看上面的示例,则主UIView的大小为320x480,但奇怪的是,tableview的大小为600x600。这不好。如果要使表格视图正确滚动,它们的大小必须相同。

在Xcode 6中进行诊断的另一种方法是在调试器中运行应用程序,然后可以暂停执行,然后按调试视图层次结构按钮:

如果这样做,您将看到视图层次结构,并且如果有任何视图大小错误,它们将像这样突出显示:

就解决此问题而言,典型的解决方案是确保您拥有表格视图的所有约束(例如,在这里,我选择了表格视图,并添加了前,后,顶部和底部约束):

然后,当我重新运行应用程序并查看视图层次结构时,一切都很好地匹配了:
(lldb) po [[UIWindow keyWindow] recursiveDescription]
<UIWindow: 0x7bc34ee0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x7bc352f0>; layer = <UIWindowLayer: 0x7bc32680>>
   | <UIView: 0x7ba387d0; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x7ba38940>>
   |    | <UITableView: 0x7d08d400; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7ba37260>; layer = <CALayer: 0x7ba32a80>; contentOffset: {0, 0}; contentSize: {320, 528}>
   |    |    | <UITableViewWrapperView: 0x7ba37ca0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x7ba38260>; layer = <CALayer: 0x7ba37fa0>; contentOffset: {0, 0}; contentSize: {320, 480}>
   |    |    |    | <UITableViewCell: 0x7ba3f270; frame = (0 0; 320 44); text = 'CHEM 1100'; autoresize = W; layer = <CALayer: 0x7ba3f5a0>>
   |    |    |    |    | <UITableViewCellContentView: 0x7ba3faf0; frame = (0 0; 320 43.5); gestureRecognizers = <NSArray: 0x7ba40400>; layer = <CALayer: 0x7ba3fcc0>>
   |    |    |    |    |    | <UITableViewLabel: 0x7ba40840; frame = (15 12; 93 20.5); text = 'CHEM 1100'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7ba40b20>>
   |    |    |    |    |    | <UITableViewLabel: 0x7ba44a10; frame = (153.5 12; 151.5 20.5); text = 'General Chemistry I'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7ba44ad0>>
   |    |    |    |    | <_UITableViewCellSeparatorView: 0x7ba456a0; frame = (15 43.5; 305 0.5); layer = <CALayer: 0x7ba45840>>
   |    |    |    | ...

07-26 09:38