我正在做一个表视图,当显示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>>
| | | | ...