TableView 不显示超过 10 行
Posted
技术标签:
【中文标题】TableView 不显示超过 10 行【英文标题】:TableView not showing more than 10 rows 【发布时间】:2015-01-11 02:14:45 【问题描述】:我正在制作一个表格视图,当显示 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 放在 stroyboard 上时,有什么不对劲的地方?
【问题讨论】:
您可能基于此的 YouTube 教程系列中有一些非常奇怪的东西:( 是的,我只是按照那个教程。但我看不出这么简单的代码有什么问题。请问你有什么想法吗?谢谢。 您确定您的表格视图完全在情节提要的范围内吗?您是否正确设置了约束? 感谢您的回复。请问怎么查边界?我没有任何限制。 您是在 StoryBoard 中创建这个吗? 【参考方案1】:有两个问题之一。 UITableViewDataSource
方法有问题(似乎不是这种情况),或者表格视图本身的大小不合适。
对于第二种情况(表视图已放在视图控制器的视图上,但大小错误),有两种方法可以诊断此问题。老派技术是在调试器中运行程序,暂停执行,然后在(lldb)
提示符处输入po [[UIWindow keyWindow] recursiveDescription]
:
(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>>
| | | | ...
【讨论】:
他给我发了代码,它是一个固定大小的表格视图,所以它不能为更大的手机调整大小。不过,很好地解释了调试过程。 :) 是的,我是在提交我的帖子后才看到你的帖子,但从他的描述中可以看出问题所在。我只花了几分钟来做屏幕快照等。但看起来我们得出了相似的结论。 感谢您如此详细的解释。请问在你的上图中,你是不是通过设置4个“0”来添加4个约束? 更重要的是点击这四个零旁边的“i-beams”。看看他们是怎么穿红色的?我通常也会取消选中“限制到边距”复选框,这使我可以更好地向后兼容早期的 iOS 版本,尽管这取决于你。见developer.apple.com/library/ios/documentation/UserExperience/… 哇,谢谢你告诉我点击“i-beams”。我确实检查过了。但问题仍然存在。我将在帖子中更新快照。【参考方案2】:正如我所怀疑的,您的表格视图具有固定大小。这意味着它对于 iPhone4 来说已经足够大了,但是在更高的设备上,tableview 没有调整大小,这意味着 tableview 没有填满屏幕,你只能看到前 10 行,尽管你可以滚动查看所有物品。
我所做的只是将正确的布局约束添加到您的 tableview 以固定到适合视图。
至于你的基地的 YouTube 视频,我今天下午看到了其中的一些,虽然他们很热情,但他们有一些你不想成为习惯的不良做法。试试 iTunes 上提供的免费斯坦福课程。也许有点难,但你会学到更多。
https://itunes.apple.com/gb/course/developing-ios-7-apps-for/id733644550
【讨论】:
【参考方案3】:Tableview 在模拟器中很难向下滚动。我自己也有同样的问题。我所做的是左键单击魔术鼠标并按住单击,然后将鼠标本身“向上”移动以在 Tableview 上显示我的其余数字。希望有帮助
【讨论】:
以上是关于TableView 不显示超过 10 行的主要内容,如果未能解决你的问题,请参考以下文章
数据库中数据类型为datatime时,如何只显示日期或者只显示时间,不一起显示行不,需要涉及到程序吗?求解