iOS 7 UITextView垂直对齐
这是怎么可能的,我的可编辑UITextView
(放置在一个UISplitView
内的直观的UIViewController内,作为UITextView
的UISplitView
)没有从头开始显示文本,但在6-7行后?
我没有设置任何特定的自动布局或类似的东西,试图删除文本没有帮助(所以没有隐藏的字符或东西)。
我在iPad上使用iOS 7,故事板看起来不错...在iOS模拟器和真实设备上,问题是一样的。 我生气了:P
这里有一些代码。 这是ViewController的viewDidLoad()
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.itemTextField.delegate = self;
self.itemTextField.text = NSLocalizedString(@"NEWITEMPLACEHOLDER", nil);
self.itemTextField.textColor = [UIColor lightGrayColor]; //optional
}
这里是UITextView
的重写函数我正在使用我在StackOverflow上找到的一些代码来模拟视图的占位符(iPhone版故事板上的相同内容工作正常)...
// UITextView placeholder
- (void)textViewDidBeginEditing:(UITextView *)textView
{
if ([textView.text isEqualToString:NSLocalizedString(@"NEWITEMPLACEHOLDER", nil)]) {
textView.text = @"";
textView.textColor = [UIColor blackColor]; //optional
}
[textView becomeFirstResponder];
}
- (void)textViewDidEndEditing:(UITextView *)textView
{
if ([textView.text isEqualToString:@""]) {
textView.text = NSLocalizedString(@"NEWITEMPLACEHOLDER", nil);
textView.textColor = [UIColor lightGrayColor]; //optional
}
[textView resignFirstResponder];
}
-(void)textViewDidChange:(UITextView *)textView
{
int len = textView.text.length;
charCount.text = [NSString stringWithFormat:@"%@: %i", NSLocalizedString(@"CHARCOUNT", nil),len];
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
return YES;
}
尝试在传递文本后调用-sizeToFit
。 这个答案可以用于垂直排列UILabel中的文本。
[UPDATE]
我更新了这个答案,使它更具可读性。
问题是,在iOS7中,容器视图控制器(如UINavigationController或UITabbarController)可以更改滚动视图(或从其继承的视图)的内容插入,以避免内容重叠。 只有当scrollview是主视图或第一个子视图时才会发生这种情况。 为了避免这种情况,您应该通过将automaticallyAdjustsScrollViewInsets
调整ScrollViewInsets设置为NO来禁用此行为,或者覆盖此方法以返回NO。
我遇到了同样的问题。
通过禁用自动scrollView insets adjustement来解决它:
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")){
self.automaticallyAdjustsScrollViewInsets = NO; // Avoid the top UITextView space, iOS7 (~bug?)
}
这是一个相当普遍的问题,所以我会创建一个简单的UITextView子类,以便您可以重新使用它并在IB中使用它。
我会使用contentInset来代替,请确保正常处理contentSize大于textView边界的情况
@interface BSVerticallyCenteredTextView : UITextView
@end
@implementation BSVerticallyCenteredTextView
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
[self addObserver:self forKeyPath:@"contentSize" options: (NSKeyValueObservingOptionNew) context:NULL];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder])
{
[self addObserver:self forKeyPath:@"contentSize" options: (NSKeyValueObservingOptionNew) context:NULL];
}
return self;
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"contentSize"])
{
UITextView *tv = object;
CGFloat deadSpace = ([tv bounds].size.height - [tv contentSize].height);
CGFloat inset = MAX(0, deadSpace/2.0);
tv.contentInset = UIEdgeInsetsMake(inset, tv.contentInset.left, inset, tv.contentInset.right);
}
}
- (void)dealloc
{
[self removeObserver:self forKeyPath:@"contentSize"];
}
@end
链接地址: http://www.djcxy.com/p/28185.html
上一篇: iOS 7 UITextView vertical alignment
下一篇: Vertically align text within a UILabel (Note : Using AutoLayout)