TableView没有显示超过10行

时间:2015-01-11 02:14:46

标签: ios uitableview tableview

我正在制作一个tableview,当显示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;

    }

请问我的代码或模拟器的问题?是因为当我把桌面视图放在stroyboard上时,那里的东西不对吗?

3 个答案:

答案 0 :(得分:2)

有两个问题之一。 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,但桌面视图的大小为600x600。那不好。如果您希望表视图正确滚动,它们需要具有相同的大小。

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

debug view hierarchy

如果你这样做,你就会看到视图层次结构,如果有任何大小不正确的视图,他们会像这样突出:

view hierarchy debugging screen

在修复此问题方面,典型的解决方案是确保您拥有表格视图的所有约束(例如,我在此处选择了表格视图,并且我添加了前导,尾随,顶部和底部约束) :

add constraints

然后,当我重新运行应用程序并查看视图层次结构时,一切都很好地匹配:

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

答案 1 :(得分:1)

我怀疑,你的桌面视图有一个固定的大小。这意味着iPhone4足够大,但在较高的设备上,tableview没有调整大小,这意味着tableview没有填满屏幕,你只看到前10行,尽管你可以滚动查看所有这些物品。

我所做的就是为你的tableview添加正确的布局约束以固定视图。

至于你拍摄基础的YouTube视频,我今天下午看到了其中的一些,尽管他们很热情,但他们有一些不好的做法,你不想成为一种习惯。尝试使用iTunes上提供的免费斯坦福课程。也许有点困难,但你会学到更多东西。

https://itunes.apple.com/gb/course/developing-ios-7-apps-for/id733644550

答案 2 :(得分:1)

Tableview在模拟器中向下滚动很棘手。我自己也有同样的问题。我做的是左键单击Magic鼠标并按下单击然后移动鼠标本身&#34; Up&#34;在Tableview上引入我的其余数字。希望有所帮助