我想知道如何设置UITextView,以使内部文本与底部对齐?就像,如果您开始输入文字,您总是会在最低行输入文字吗?
我不相信有一种内置的方法可以使UITextView
中的文本垂直对齐,但是您应该能够使用contentOffset
类的UITextView
属性来完成此操作。有关更多详细信息,请参见此博客文章:
http://imagineric.ericd.net/2011/03/10/ios-vertical-aligning-text-in-a-uitextview/
更新:由于以上链接似乎已失效,因此我使用了Wayback Machine检索了an archived copy,并粘贴了下面文章的文本。
iOS中开箱即用的UITextView(多行文本)的默认和预期行为是将其容器中左上方的文本对齐。在大多数情况下,效果很好。但是,最近我需要将文本在控件内垂直居中或使所有文本与控件的底部对齐。
您可以将观察者添加到控件中,并在其内容大小更改(设置了文本)时,触发方法。然后该方法可以处理文本在控件中的实际位置。如果没有必要进行对齐,则默认为控件的正常行为(顶部垂直对齐)。
我们去:
- (void) viewDidLoad {
[textField addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL];
[super viewDidLoad];
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
UITextView *tv = object;
//Center vertical alignment
//CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0;
//topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect );
//tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
//Bottom vertical alignment
CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height);
topCorrect = (topCorrect <0.0 ? 0.0 : topCorrect);
tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
}
您可以决定要使用哪种,也可以将方法冲洗掉以接受要使用哪种垂直对齐方式的参数。这很好用,如果将属性内置到控件中就可以了。
如果可以使用,请享用。
一种方法可能是使用多行UILabel,然后使用类似以下的方法:
http://texnological.blogspot.com/2011/08/how-to-do-vertical-alignment-for.html
作者致谢!
使用自动版式为我工作:
1)布置UITextView
的位置,以使高度足以容纳一行文本,并且底部固定在屏幕底部(或文本视图下方的内容)。
2)在视图控制器中保留对NSLayoutConstraint
的文本视图高度的引用。
3)将您的视图控制器设置为UITextViewDelegate
4)在输入文本时调整文本视图的高度并强制布局。例如:
- (void)textViewDidChange:(UITextView *)textView;
{
self.textViewHeightConstraint.constant = textView.contentSize.height;
[self.textView layoutIfNeeded];
}