关于正确调整带有自动布局的tableHeaderView(一个这样的线程)有很多线程,但它们倾向于预先设置iOS 8.
我有一个有很多表视图的情况,都有标题,在iOS 7下正确大小但在iOS 8下使用大多数上述线程支持的代码不正确.在表的控制器中,我有以下方法:
- (void)rejiggerTableHeaderView
{
self.tableView.tableHeaderView = nil;
UIView *header = self.headerView;
[header setNeedsLayout];
[header layoutIfNeeded];
CGFloat height = [header systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
CGRect headerFrame = header.frame;
headerFrame.size.height = height;
header.frame = headerFrame;
self.tableView.tableHeaderView = header;
}
Run Code Online (Sandbox Code Playgroud)
使用iOS 7下的多行标签,这样可以正确调整表格视图的标题大小,如下所示:

但是在iOS 8下运行的相同代码会产生以下结果:

获取-systemLayoutSizeFittingSize的技巧是什么:在iOS 8下返回正确的大小?这是一个演示该问题的示例项目.
我一直在视图控制器中使用以下代码来更新键盘显示时UITextView的内容偏移量:
- (void)keyboardWasShown:(NSNotification *)notification
{
NSDictionary *info = [notification userInfo];
CGRect keyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
UIEdgeInsets contentInsets = UIEdgeInsetsMake( 0.0, 0.0, keyboardRect.size.height, 0.0 );
self.textView.contentInset = contentInsets;
self.textView.scrollIndicatorInsets = contentInsets;
}
Run Code Online (Sandbox Code Playgroud)
在键盘显示的情况下,手动将UITextView的内容滚动到底部,使其正确地在键盘顶部正上方结束. - [UITexView scrollRangeToVisible:]但是,似乎不再考虑键盘的存在.
在视觉上,这是正在发生的事情.我建立了一个内联搜索我的文本视图与控件在结果之间跳转(类似于在Safari中搜索).因此,在此处显示的文本视图中,当用户点击"下一步"按钮时,搜索结果将逐渐显示结果.当用户转到第七个结果时,视图将滚动直到可见.
当用户转到第五个搜索结果时,使用键盘(来自UISearchBar)在相同的搜索结果上,它将滚动到键盘上方.但仅限于iOS 6.在iOS 7中,在非键盘情况下转到第七个搜索结果之前不会发生滚动,即使这样,它也会滚动相同的数量,因此它只能在文本视图框架的底部下方看到.
这是iOS 7中的已知变化吗?我正在使用自动布局,所以我要尝试的另一件事是调整文本视图的底部间距约束以缩小整个视图以避免问题,但是想要检查是否仍然可以使用我现有的代码IOS 7.