Текстовое пространство UITextView уменьшается во время изменения размера

Я хотел бы разрешить пользователю изменять размер UITextView. Я отображаю кнопку в правом нижнем углу UITextView, например, когда пользователь перемещает ее, UITextView следует за ней и изменяется.

Это работает нормально, но текстовое пространство ведет себя странно. Текстовое пространство, кажется, становится все меньше и меньше во время изменения размера. Поэтому, если я сильно изменяю размер, перехожу к большому фрейму, а затем к маленькому фрейму, текстовое пространство становится меньше, чем фрейм.

- (id) init{//My subclass of UITextView
    self = [super init];
    if(self){
        //Resize button
        //Init ResizeButton
        self.resizeButton = [[UIButton alloc]init];

        //Image
        [self.resizeButton setImageForAllState:[UIImage imageNamed:@"Isosceles-right-triangle.png"]];

        //Target
        [self.resizeButton addTarget:self action:@selector(wasDragged:withEvent:) forControlEvents:UIControlEventTouchDragInside];
        [self.resizeButton addTarget:self action:@selector(wasDragged:withEvent:) forControlEvents:UIControlEventTouchDragOutside];

        //Add to view
        [self addSubview:resizeButton];

        //Self
        //text font
        [self setFont:[UIFont fontWithName:@"papyrus" size:17]];

    }
    return self;
}

- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event
{


//  NSLog(@"wasDragged");// get the touch
    UITouch *touch = [[event touchesForView:button] anyObject];

    // get delta
    CGPoint previousLocation = [touch previousLocationInView:button];
    CGPoint location = [touch locationInView:button];
    CGFloat delta_x = location.x - previousLocation.x;
    CGFloat delta_y = location.y - previousLocation.y;

    // move button
    button.center = CGPointMake(button.center.x + delta_x,
                                button.center.y + delta_y);


    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width+ delta_x, self.frame.size.height+ delta_y);

}

Вид также можно перетаскивать

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    // Calculate offset
    CGPoint pt = [[touches anyObject] locationInView:self];
    float dx = pt.x - startLocation.x;
    float dy = pt.y - startLocation.y;
    CGPoint newcenter = CGPointMake(self.center.x + dx, self.center.y + dy);

    // Set new location
    self.center = newcenter;

}

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // Calculate and store offset, and pop view into front if needed
    CGPoint pt = [[touches anyObject] locationInView:self];
    startLocation = pt;
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {


}

РЕДАКТИРОВАТЬ

Перед изменением размера Перед изменением размера

Изменение размера Изменение размера

Вернуться к исходному размеру Вернуться к исходному размеру


person Alexandre    schedule 18.02.2013    source источник


Ответы (2)


Ну у меня тоже такая проблема. Решение состоит в том, чтобы создать подкласс UITextView и переопределить метод setFrame:. Перед настройкой нужного кадра установите кадр CGRectZero для textView. Это решит вашу проблему. Код ниже.

- (void)setFrame:(CGRect)frame
{
    [super setFrame:CGRectZero];
    [super setFrame:frame];
}
person Povilas    schedule 01.05.2013

Похоже, вы могли бы сделать одну из двух вещей:

Во-первых: отключите «Настроить по размеру» элемента управления.

textfield.adjustsFontSizeToFitWidth = NO;

Второе: жестко закодировать размер шрифта в коде.

textfield.font = [UIFont fontWithName:@"desired font name" size:10];
person Grymjack    schedule 18.02.2013
comment
1. textfield.adjustsFontSizeToFitWidth = НЕТ; для UITextView? 2. Я делаю это в методе инициализации. - person Alexandre; 18.02.2013