首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用自定义UIScrollView自动调整UIControl内容偏移量

用自定义UIScrollView自动调整UIControl内容偏移量
EN

Stack Overflow用户
提问于 2014-11-24 16:28:53
回答 2查看 1K关注 0票数 2

UITextField被添加到UIScrollview中时,滚动视图会自动调整其contentOffset,这样视图就不会被键盘遮挡。

我有一个定制的UIControl,当它通过分配它的inputView属性成为第一个响应者时,它也会显示一个键盘。相同的滚动行为不起作用。是否有一种方法来配置UIControl,使滚动视图在显示键盘时保持其可见?

我的猜测是,通过重写在协议UITextField和其他类中定义的属性,这种行为是可能的。但这可能是个迷宫。还要注意,这里的问题与滚动视图的contentInset属性无关。滚动视图可以滚动以显示自定义控件,只是当控件成为第一个响应程序时,它不会自动执行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 17:58:15

看起来,这是由苹果利用[UIFieldEditor scrollSelectionToVisible]的内部私有方法处理的,正如在这个博客中所指出的:http://sugarrushva.my03.com/712423-disable-uiscrollview-scrolling-when-uitextfield-becomes-first-responder.html

它似乎是通过在视图层次结构中向上移动来做到这一点的,如果它找到了一个父UIScrollView,它会滚动该视图以将UITextField带入可见视图。当自定义控件成为第一个响应程序时,您需要手动实现滚动,或者通过内省父视图来处理它。

票数 2
EN

Stack Overflow用户

发布于 2014-11-24 18:57:09

我被“神射手”指向了正确的方向。

基于此,下面是我在控件中所写的内容,以获得所需的行为:

代码语言:javascript
运行
复制
- (BOOL)becomeFirstResponder {
    if ([super becomeFirstResponder]) {
        [self scrollParentViewToFrame];
        return YES;
    }
    return NO;
}

- (void)scrollParentViewToFrame {
    UIScrollView *scrollView = self.parentScrollView;
    CGRect frame = [scrollView convertRect:self.bounds fromView:self];
    [self.parentScrollView scrollRectToVisible:frame animated:YES];
}

- (UIScrollView *)parentScrollView {
    return (UIScrollView *) [self closestParentWithClass:[UIScrollView class]];
}

注意,如果控件不是滚动视图的直接后代,则不使用frame属性。相反,将边界转换为滚动视图的坐标空间。

在调用[super becomeFirstResponder]使其与用于调整滚动视图内嵌的键盘通知进行适当交互之后,还需要执行滚动调整。

我定义了在UIView类别中搜索最近的父滚动视图的方法,这使得递归搜索层次结构变得更容易。

代码语言:javascript
运行
复制
- (UIView *)closestParentWithClass:(Class)class {
    if ([self isKindOfClass:class]) {
        return self;
    }
    // Recursively searches up the view hierarchy, returns nil if a view
    // has no superview.
    return [self.superview closestParentWithClass:class];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27109498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档