iOS 7 への移行を開始したばかりで、アプリの UIPickerView に関するいくつかの問題が見つかりました。その理由は、UIPickerView のサブビューを使用して背景とスタイルをカスタマイズしたからです。UIpickerview のサブビュー数をログに記録していますが、常に 3 です。
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView
{
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent: (NSInteger)component
{
return 22;
}
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
UILabel* label = [[UILabel alloc]init];
label.frame = CGRectMake(152, 3,100, 16);
label.text = @"test";
NSLog(@"count is %i",_pickerView.subviews.count);
return label;
}
I iOS 6.1 では、カウントは常に 9 です。
編集 1: もう 1 つの違い: 次のコードは iOS 7 でクラッシュし、iOS 6 では問題なく動作します。
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
UILabel* label = [[UILabel alloc]init];
label.frame = CGRectMake(152, 3,100, 16);
label.text = @"test";
if(row > 3){
UIView* view = [pickerView viewForRow:3 forComponent:0]; // crash in iOS 7
}
NSLog(@"count is %i",_pickerView.subviews.count);
return label;
}
編集 2: _pickerView.showsSelectionIndicator = NO;
iOS 7 には何の影響もありません。
誰かがそれがどのように機能するか説明できますか?