Новые строки в iOS 7 UITextView, нарушающие перенос зоны исключения Text Kit

Я работаю с Text Kit в iOS 7 и нахожу много странностей вокруг NSTextContainer запретных зон.

У меня есть два вида: UITextView и простой перетаскиваемый UIView; по мере движения UIView я создаю путь Безье из фрейма UIView (с поправкой на координатное пространство UITextView) и обновляю массив NSTextContainer exclusionPaths UITextView — довольно просто.

На первом снимке экрана видно, что Text Kit красиво оборачивает текст вокруг прямоугольной зоны исключения:

Зона отчуждения без новой строки в тексте

Однако, когда пользователь вводит новые строки в UITextView, TextKit, кажется, думает, что зона исключения намного больше по вертикали - на то, что кажется точно таким же высоким, как пробел, созданный новой строкой. Путь Безье точно такой же, так что это похоже на проблему с Text Kit (если я не делаю что-то не так).

Зона отчуждения с новыми строками в тексте

Код:

ViewController.h:

@interface ViewController : UIViewController<UITextViewDelegate>

@property (nonatomic, strong) IBOutlet UITextView *textView;
@property (nonatomic, strong) IBOutlet UIView *dragView;

@end

ViewController.m:

-(void)viewDidLoad
{
    [super viewDidLoad];

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
    [panRecognizer setMinimumNumberOfTouches:1];
    [panRecognizer setMaximumNumberOfTouches:1];
    [self.dragView addGestureRecognizer:panRecognizer];

    [self updateExclusionZone];
}

-(void)move:(UIPanGestureRecognizer *)pan
{
    [self.view bringSubviewToFront:[pan view]];

    if ([pan state] == UIGestureRecognizerStateBegan) {
        NSLog(@"pan began");
    }

    self.dragView.center = [pan locationInView:self.view];
    [self updateExclusionZone];

    if ([pan state] == UIGestureRecognizerStateEnded) {
        NSLog(@"pan ended");
    }
}

-(void)updateExclusionZone
{
    CGRect dragViewFrame = self.dragView.frame;
    CGRect exclusionRect = [self.view convertRect:dragViewFrame toView:self.textView];

    UIBezierPath *exclusion = [UIBezierPath bezierPathWithRect:exclusionRect];

    self.textView.textContainer.exclusionPaths = @[exclusion];
}

есть идеи?


person Rob    schedule 23.09.2013    source источник


Ответы (1)


Сегодня я столкнулся с той же проблемой.

Эта ошибка появляется, если вы устанавливаете editable и selectable одновременно. Если выбран только один или нет, он отображается так, как ожидалось. Оба выбраны по умолчанию.

введите здесь описание изображения
введите здесь описание изображения

Если вам нужны обе опции, просто установите их в коде.

_textView.textContainer.exclusionPaths = exclusionPaths;
_textView.attributedText = attrString;
_textView.editable = YES;
_textView.selectable = YES;
person vikingosegundo    schedule 01.11.2013