2013-02-18 39 views
1

我想让用户调整UITextView的大小。我在UITextView的底部角落显示一个按钮,例如当用户移动它时,UITextView跟随它并调整大小。rezise期间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 { 


} 

EDIT

之前调整 Before resizing

调整大小 Resizing

返回到原来的大小 Back to original size

回答

1

嗯,我也有这个问题。解决方法是继承UITextView并覆盖setFrame:方法。在设置你想要的框架之前,为textView设置CGRectZero框架。它会解决你的问题。代码如下。

- (void)setFrame:(CGRect)frame 
{ 
    [super setFrame:CGRectZero]; 
    [super setFrame:frame]; 
} 
+0

干得好! Thx你,解决问题。 – Alexandre 2013-05-06 12:30:17

0

好像你可以做两两件事之一:

第一:关闭“调整,以适应”控制

textfield.adjustsFontSizeToFitWidth = NO; 

第二:硬编码字体大小放入代码

textfield.font = [UIFont fontWithName:@"desired font name" size:10]; 
+0

1.“textfield.adjustsFontSizeToFitWidth = NO;”为UITextView? 2.我在init方法中这样做。 – Alexandre 2013-02-18 13:50:27