仅iOS 8.1间歇性地显示UITextView
问题描述:
我有一个模板测验应用程序,它已经在应用商店中以各种形式出现了一段时间,总的来说它收到了很好的评价并且没有错误报告。仅iOS 8.1间歇性地显示UITextView
最近我有两个错误报告,人们使用iOS 8.1.2或8.1.3的iPad,并说现在和我用来显示问题的UITextView是空白的。
我一直无法复制这个错误,但如果有人能够阐明这个错误,我将不胜感激。
对象questions
和userAnswer
不是零,所以它肯定是一个UITextView问题。
该控制器是在这里:
@interface ReviewController() @property (strong, nonatomic) IBOutlet UITextView *output; @end @implementation ReviewController - (void)viewDidLoad { [super viewDidLoad]; [self setReviewText]; // Do any additional setup after loading the view. } -(void)setReviewText{ NSArray* questions = [[NSArray alloc] init]; questions = [_manager getAllQuestions]; NSMutableArray* userAnswer = [[NSMutableArray alloc] init]; userAnswer = [self answersAttributed]; if(questions == nil) _output.text = @"Questions Error"; if (userAnswer == nil) { _output.text = @"Error"; } NSMutableAttributedString *mutableAttString = [[NSMutableAttributedString alloc] init]; int i = 0; NSAttributedString *linebreak =[[NSAttributedString alloc] initWithString:@"\n"]; for (Question* q in questions) { if (i == [userAnswer count]) break; NSAttributedString *qtext =[[NSAttributedString alloc] initWithString:q.questionText]; NSAttributedString *ctext =[[NSAttributedString alloc] initWithString:@"Correct Answer:\n"]; NSAttributedString *atext =[[NSAttributedString alloc] initWithString:q.answerText]; NSAttributedString *ytext =[[NSAttributedString alloc] initWithString:@"Your Answer:\n"]; NSAttributedString *utext =[[NSAttributedString alloc] initWithAttributedString:userAnswer[i]]; [mutableAttString appendAttributedString:qtext]; [mutableAttString appendAttributedString:linebreak]; [mutableAttString appendAttributedString:ctext]; [mutableAttString appendAttributedString:atext]; [mutableAttString appendAttributedString:linebreak]; [mutableAttString appendAttributedString:ytext]; [mutableAttString appendAttributedString:utext]; [mutableAttString appendAttributedString:linebreak]; [mutableAttString appendAttributedString:linebreak]; i++; } NSAttributedString* outText = [[NSAttributedString alloc] init]; outText = [mutableAttString mutableCopy]; _output.attributedText = outText; [_output setFont:[UIFont preferredFontForTextStyle:UIFontTextStyleBody]]; } -(NSMutableArray*)answersAttributed { NSMutableArray* ansAtt = [[NSMutableArray alloc] init]; NSArray* questions = [[NSArray alloc] init]; questions = [_manager getAllQuestions]; NSArray* userAnswers = [[NSArray alloc] init]; userAnswers = [_manager getAllUserAnswers]; if ([questions count] != [userAnswers count]) { return ansAtt; } int i = 0; for (NSString* userAnswer in userAnswers) { if([[questions[i] answerText] isEqualToString:userAnswer]) { NSDictionary *attributes = @{NSBackgroundColorAttributeName:[UIColor greenColor]}; NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:userAnswer attributes:attributes]; [ansAtt addObject:attrString]; } else { NSDictionary *attributes = @{NSBackgroundColorAttributeName:[UIColor redColor]}; NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:userAnswer attributes:attributes]; [ansAtt addObject:attrString]; } i++; } return ansAtt; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Make sure your segue name in storyboard is the same as this line if ([[segue identifier] isEqualToString:@"review2results"]) { // Get reference to the destination view controller ReviewController *vc = [segue destinationViewController]; // Pass any objects to the view controller here, like... [vc setManager:_manager]; } }
答
随着自动布局,如果你没有足够的约束,以充分指定大小和位置,然后有时你会看到和,有时你不能。未指定的约束可以具有随机值,如0高度或离屏位置。
检查以确保约束完全指定。
答
在Storyboard
标记为Non-Editable
和Non-Selectable
我的情况textview
对iOS 8.1
同样奇怪的行为(在iOS的9+没有问题)。
- (void)viewDidLoad {
[super viewDidLoad];
textview.attributedText = [[NSAttributedString alloc] initWithString:@"non-nil"]];
value = textview.attributedText;
//^ value is nil !!!
}
修正了这一点:
- (void)viewDidLoad {
[super viewDidLoad];
textview.editable = YES;
textview.attributedText = [[NSAttributedString alloc] initWithString:@"non-nil"]];
textview.editable = NO;
value = textview.attributedText;
//^ value is @"non-nil" now !!!
}
是否使用自动版式?它可能与旋转有关 - 比如说如果在问题加载时旋转设备? – brandonscript 2015-02-09 21:54:18
我正在使用AutoLayout,但我已将应用程序配置为只能在纵向模式下工作。有人说,大约50%的时间'UITextView'没有出现,似乎他们每次都在旋转,但我会问。感谢您的建议。 – James 2015-02-09 21:56:34
是的,这听起来不太可能! – brandonscript 2015-02-09 21:57:11