Dies funktioniert für mich. Ändern der textView contentInset- und Rahmeneinfügung/-position, um die richtige Auffüllung und Wortumbruch zu erhalten. Ändern Sie dann die textView-Grenzen, um horizontales Scrollen zu verhindern. Sie müssen das Padding jedes Mal zurücksetzen, wenn der Text ausgewählt und geändert wird.
- (void)setPadding
{
UIEdgeInsets padding = UIEdgeInsetsMake(30, 20, 15, 50);
textView.contentInset = padding;
CGRect frame = textView.frame;
// must change frame before bounds because the text wrap is reformatted based on frame, don't include the top and bottom insets
CGRect insetFrame = UIEdgeInsetsInsetRect(frame, UIEdgeInsetsMake(0, padding.left, 0, padding.right));
// offset frame back to original x
CGFloat offsetX = frame.origin.x - (insetFrame.origin.x - (padding.left + padding.right)/2);
insetFrame = CGRectApplyAffineTransform(insetFrame, CGAffineTransformMakeTranslation(offsetX, 0));
textView.frame = insetFrame;
textView.bounds = UIEdgeInsetsInsetRect(textView.bounds, UIEdgeInsetsMake(0, -padding.left, 0, -padding.right));
[textView scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO];
}
-(void)textViewDidChangeSelection:(UITextView *)textView
{
[self setPadding];
}
-(void)textViewDidChange:(UITextView *)textView
{
[self setPadding];
}
Ja für Sie nützlich sein, das ist, was ich jetzt mache. Funktioniert ok für die Seitenränder, aber der obere Rand hat Probleme. Aus der Sicht des Benutzers wird Text beim Scrollen oben abgeschnitten, da Text nur in der UITextView gerendert wird. – strawtarget
Und Sie können die vertikale Bildlaufleiste auf diese Weise nicht richtig anzeigen. – an0
Wenn Sie 'textView.ClipsToBounds = NO 'setzen, wird das Abschneiden am oberen Rand" repariert ". Natürlich hilft das nicht, die vertikale Bildlaufleiste korrekt anzuzeigen. – villapossu