UI 滚动时卡住 UIPickerView、UITableView ios8、ios9

UI getting freezed while scrolling UIPickerView, UITableView ios8, ios9

我有一个视图,其中包含一个 pickerView 和一个 TextView。
当我展示我的视图时,滚动越来越卡住。
来到 4-5 次之后视图,它越来越卡住,最后 UI 在滚动 UIPickerView 时完全冻结。 PickerView 有 4 个组件,其中 3 个具有大约 50 个值。

请检查下面我的 PickerView 代码:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 4;
}

// The number of rows of data
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:    (NSInteger)component
{
    return [[_pickerData objectAtIndex:component] count];
}


- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:   (NSInteger)component
{
    switch (component){
       case 0:
           return 150.0;
       case 1:
           return 50.0f;
       case 2:
           return 20.0f;
       case 3:
           return 50.0f;
   }
   return 0;
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row    forComponent:(NSInteger)component reusingView:(UIView *)view{
   UILabel* tView = (UILabel*)view;
   if (!tView){
       tView = [[UILabel alloc] init];
       tView.font=[UIFont fontWithName:@"ArialNarrow" size:22];
       tView.textAlignment=NSTextAlignmentCenter;
       tView.text=_pickerData[component][row];
       // Setup label properties - frame, font, colors etc



      }

       return tView;
   }

请帮助我。

如果您只想在pickerView中显示text,那么我建议您使用此方法。

- (NSAttributedString*) pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component {

    NSAttributedString *str =  [[NSAttributedString alloc] initWithString:_pickerData[component][row] attributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"ArialNarrow" size: 22], NSFontAttributeName, nil]];
    return str;
}

而不是使用

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row    forComponent:(NSInteger)component reusingView:(UIView *)view

可能lable分配了很多次。

希望对你有帮助。

感谢加里的帮助。

我已经解决了这个问题。问题出在线程上。我通过在应用程序冻结时暂停应用程序来发现问题。在左侧,我们可以看到 运行 线程。从那里我抓住了线程调用。它干扰了主线程,这就是应用程序冻结的原因。