右边的帧对齐与sizeToFit

时间:2017-09-01 14:36:07

标签: ios objective-c iphone

我正在制作聊天用户界面。我创建了一个用于显示文本消息的textview。 当我使用sizeToFit进行textview时。它始终从X(左)边缘开始尺寸。我需要从视图的右侧设置小消息。

enter image description here

这是我的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];

3 个答案:

答案 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);
}