我正在制作聊天用户界面。我创建了一个用于显示文本消息的textview。 当我使用sizeToFit进行textview时。它始终从X(左)边缘开始尺寸。我需要从视图的右侧设置小消息。
这是我的Textview代码。
UITextView *TextLbl = [[UITextView alloc]initWithFrame:CGRectMake(self.navigationController.navigationBar.frame.size.width-220, cell.frame.origin.y, 210, 60)];
TextLbl.textAlignment=NSTextAlignmentRight;
TextLbl.contentMode=UIViewContentModeRight;
TextLbl.editable=NO;
[TextLbl sizeToFit];
[TextLbl.textContainer setSize:TextLbl.frame.size];
答案 0 :(得分:0)
-sizeToFit
设置UITextView的CGSize,但不会修改超级视图中放置元素的位置。根据您选择的布局系统(自动布局等),您可以通过不同的方式实现依靠右边缘的文本视图。
答案 1 :(得分:0)
要实现此目的,要么使用布局约束,要么计算文本的大小,textview的设置大小相同,x将是screenWidth-textview.width。
修改强>
添加约束,如下面的代码所示:
UITextView *TextLbl = [[UITextView alloc]init];
[self.view addSubview:TextLbl];
[TextLbl setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:TextLbl attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:TextLbl.superview attribute:NSLayoutAttributeRight multiplier:1.0 constant:-10]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:TextLbl attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationLessThanOrEqual toItem:TextLbl.superview attribute:NSLayoutAttributeWidth multiplier:1.0 constant:-10]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:TextLbl attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:TextLbl.superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:100]];
[TextLbl setText:@"Hello there!"];
[TextLbl setBackgroundColor:[UIColor redColor]];
TextLbl.textAlignment=NSTextAlignmentRight;
TextLbl.contentMode=UIViewContentModeRight;
TextLbl.editable=NO;
TextLbl.scrollEnabled = NO;
您可以根据布局调整约束。
答案 2 :(得分:0)
解决方案 -
- (void)sizeToFitWithAlignmentRight :(UILabel *)label {
CGRect beforeFrame = label.frame;
[label sizeToFit];
CGRect afterFrame = label.frame;
label.frame = CGRectMake(beforeFrame.origin.x + beforeFrame.size.width - afterFrame.size.width, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
}