squ*_*rog 5 iphone uitableview uiscrollview
我有一个UITableView略大于self.view.我UITextField在视图的底部有一个,– textFieldDidBeginEditing:当文本字段开始编辑时,我使用委托方法向上移动视图.
这样可以正常工作,但是如果我UITextField在编辑时尝试滚动视图(并且内容已经偏移),则内容会突然移动到视图的底部"适当"位置.换句话说,contentOffset.yI set被更改为等于内容视图的大小(正如您对正常行为所期望的那样).
任何想法如何在编辑时克服这种行为?
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
// Scroll to the currently editing text field
[self scrollViewToTextField:textField];
}
- (void)scrollViewToTextField:(id)textField
{
// Set the current _scrollOffset, so we can return the user after editing
_scrollOffsetY = self.tableView.contentOffset.y;
// Get a pointer to the text field's cell
UITableViewCell *theTextFieldCell = (UITableViewCell *)[textField superview];
// Get the text fields location
CGPoint point = [theTextFieldCell convertPoint:theTextFieldCell.frame.origin toView:self.tableView];
// Scroll to cell
[self.tableView setContentOffset:CGPointMake(0, point.y - 12) animated: YES];
}
Run Code Online (Sandbox Code Playgroud)
squ*_*rog 12
避免此行为的方法是同时应用contentInset.所以对于上面的例子:
- (void)scrollViewToTextField:(id)textField
{
// Set the current _scrollOffset, so we can return the user after editing
_scrollOffsetY = self.tableView.contentOffset.y;
// Get a pointer to the text field's cell
UITableViewCell *theTextFieldCell = (UITableViewCell *)[textField superview];
// Get the text fields location
CGPoint point = [theTextFieldCell convertPoint:theTextFieldCell.frame.origin toView:self.tableView];
// Scroll to cell
[self.tableView setContentOffset:CGPointMake(0, point.y - 12) animated: YES];
// Add some padding at the bottom to 'trick' the scrollView.
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, point.y - 60, 0)];
}
Run Code Online (Sandbox Code Playgroud)
然后一定要在编辑后重置插图:
- (void)textFieldDidEndEditing:(UITextField *)textField {
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
Run Code Online (Sandbox Code Playgroud)
这种方法的警告是,您必须在- (void)scrollViewDidScroll:(UIScrollView *)scrollView方法中实现一些检查,以检查您的文本字段是否仍在视图中.
替代方法是在编辑开始时禁用滚动,并在结束时重新启用滚动.您必须确定此操作对应用程序中的UX是否有害.