Reputation: 3637
I am facing an issue of resizing UITextView in pinch gesture recognizer method. This gesture recognizer is for another view. I want that textview should also be resized along with that view.
I successfully able to resize UITextView according to requirement. But I have issue with text displayed in textview. After zooming in and zooming out for few times. contents inside UITextView does not come properly (see below image "After zooming in/out"). It decreases content width. I checked content size of UITextView, but it gives same width before resizing and after resizing.
Here, I have set text alignment to center for UITextView. I have also applied contentInset to UIEdgeInsetZero.
Any help will be appreciated.
Before zooming in/out
After zooming in/out
Upvotes: 12
Views: 1298
Reputation: 781
Trey's answer works but it causes too much CPU usage. Try implementing the same method using KVO.
[self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionOld context:NULL];
and then,
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString:@"bounds"]) {
[self removeObserver:self forKeyPath:@"bounds"];
CGRect bounds = self.bounds;
self.bounds = CGRectZero;
self.bounds = bounds;
[self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionOld context:NULL];
}
}
Upvotes: 0
Reputation: 356
I won't profess to be an expert on this, but it seems that UITextView
wants to have a baseline of CGRectZero
to work with, I have run into this very issue and my findings were that the problem presented itself when shrinking the UITextView
, not when enlarging, so by overriding - (void)layoutSubviews
like this:
- (void)layoutSubviews {
CGRect bounds = self.bounds;
self.bounds = CGRectZero;
self.bounds = bounds;
}
in a subclass of UITextView
this issue will be resolved. This definitely isn't the most elegant thing I've ever seen, but it's the only solution I've come up with.
Upvotes: 1
Reputation: 2579
Are you calling setNeedsLayout
on the parent view after you have altered the frame?
Try logging the bounds of the text view like so:
NSLog(@"Bounds: %@", NSStringFromCGRect(textView.bounds));
Upvotes: 2