Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rotating UITextView programmatically

There is a weird problem, if you create a UITextView and rotate it right after creating it, some lines or characters will not be visible! Try this:

myTextView.font = UIFont.boldSystemFontOfSize(20)
myTextView.text = "Hello world wht the hell\nhello mrs lorem ipum!"
let maxsize = CGSizeMake(700, 700)
let frame = myTextView.sizeThatFits(maxsize)
myTextView.frame = CGRectMake(200, 200, frame.width, frame.height)     
view.addSubview(myTextView)
myTextView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))

Result: enter image description here

You see? most of is lost! But if you remove myTextView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2)) and run it through a button it's fine:

enter image description here

You can view the code on git: https://github.com/maysamsh/rotateTextView

like image 708
Maysam Avatar asked Oct 27 '25 08:10

Maysam


1 Answers

As a workaround, try to set your UITextView in another simple UIView, and then rotate this UIView.

It should help because this way, UITextView should react like it's not rotated (so you can set it with inset constraints to superview)

Then you just have to care about the form of the superview.

Other solution

myTextView.font = UIFont.boldSystemFontOfSize(20)
myTextView.text = "Hello world wht the hell\nhello mrs lorem ipum!"
let maxsize = CGSizeMake(700, 700)
let frame = myTextView.sizeThatFits(maxsize)
myTextView.frame = CGRectMake(200, 200, frame.width, frame.height)     
view.addSubview(myTextView)
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {  
    myTextView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
}

A bit dirty, but should work, the user might see a small clipping, but mostly he shouldn't even see it.

like image 56
Tancrede Chazallet Avatar answered Oct 28 '25 23:10

Tancrede Chazallet



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!