我正在制作一个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上时,那里的东西不对吗?
答案 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中诊断此问题的另一种方法是在调试器中运行应用程序,然后您可以暂停执行,然后按调试视图层次结构按钮:
如果你这样做,你就会看到视图层次结构,如果有任何大小不正确的视图,他们会像这样突出:
在修复此问题方面,典型的解决方案是确保您拥有表格视图的所有约束(例如,我在此处选择了表格视图,并且我添加了前导,尾随,顶部和底部约束) :
然后,当我重新运行应用程序并查看视图层次结构时,一切都很好地匹配:
(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上引入我的其余数字。希望有所帮助