ios – UITextView外的光标

搜索了高低,似乎无法找到答案.我见过的最接近的是:
UITextView cursor below frame when changing frame

对不起,没有截图,因为我(几乎)没有声誉,但它看起来类似于链接的SO帖子.

当我在iOS6上运行应用程序时,工作完美(内容滚动光标以将其保留在屏幕上),但在iOS7上,光标超出了UITextView的末尾.我尝试添加UIEdgeInsets来移动内容,但是当用户主动输入文本时,它只是不断添加新行,直到光标位于文本视图的末尾.

我的布局包含一个Label(headerText),下面有一个UITextView(textView).此视图显示在选项卡栏中.添加一个键盘输入附件,但在调用功能之前,它的高度会自动计算到键盘高度.

这是我用来调整视图大小的函数,从键盘显示/隐藏委托,旋转,初始布局等调用

-(void)resizeViewsWithKbdHeight:(float)kbHeight
{
    //set the header label frame

    //set constraints
    //total view width - 30 (15 each for left and right padding)
    CGFloat labelWidth = ([[[self navigationController] view] bounds].size.width - 30);
    CGSize constraintSize = {labelWidth,CGFLOAT_MAX};
    //calculate needed height for header label
    CGSize textSize = [[self headerText] sizeWithFont:[UIFont systemFontOfSize:17.0f]
                                    constrainedToSize:constraintSize
                                        lineBreakMode:NSLineBreakByWordWrapping];
    //build and set frame for header label:
    //make it the same as the old
    CGRect headerTempSize = [[self headerLabel] frame];
    //except for the height
    headerTempSize.size.height = textSize.height;
    //and set it
    [[self headerLabel] setFrame:headerTempSize];

    //correct the placement of the UITextView,so it's under the header label

    //build a new frame based on current textview frame
    CGRect newFrame = [[self textView] frame];

    //get the y position of the uitextview,the +8 is the padding between header and uitextview
    CGFloat vertPadding = [[self headerLabel] frame].origin.y + [[self headerLabel] frame].size.height + 8;

    //bump it down vertically
    newFrame.origin.y = vertPadding;

    //bump things down by the amount of the navigation bar and status bar
    float offscreenBump = [[[self navigationController] navigationBar] frame].origin.y + [[[self navigationController] navigationBar] frame].size.height;

    //if we aren't showing the keyboard,add the height of the tab bar
    if(kbHeight == 0) {
        offscreenBump += [[[self tabBarController] tabBar] frame].size.height;
    }

    //calculate the new height of the textview,the +9 is for padding below the text view
    CGFloat newHeight = [[[self navigationController] view] bounds].size.height - ([[self textView] frame].origin.y + 9 + kbHeight + offscreenBump);

    //resize the height as calculated
    newFrame.size.height = newHeight;

    //set textview frame to this new frame
    [[self textView] setFrame:newFrame];
}

我正在尝试支持iOS5,所以没有AutoLayout.

我有可能对我的工作方式非常天真.

提前致谢!

解决方法

这似乎是iOS 7中的一个错误.我发现纠正这个问题的唯一方法是为UITextView添加一个委托并实现textViewDidChangeSelection,重置视图以显示如下选择:
#define SYstem_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

- (void) textViewDidChangeSelection: (UITextView *) tView {
    if (SYstem_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
        [tView scrollRangetoVisible:[tView selectedRange]];
    }
}

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...