iOS: 如何根据旁边的 UILabel 中的文本调整相邻 UIView 的位置

iOS: How to adjust placement of adjacent UIView based on text in UILabel next to it

有两个 UIImageView 和两个 UILabel 设置如上图。 UILabel 的文本都将通过网络数据填充,并且可以是任意长度。

"Something" 标签不可避免地填充了比 "something" 更长的内容时,紧靠右侧的 UIImageView 需要根据标签内的文本量向右移动"something" 标签。

人们会怎么做呢?

尽管请使用 auto layouts,但这里有一种处理此问题的编程方式:

// Image before Something text
UIImageView *somethingImageView = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 10.0, 40, 40)];

CGFloat somethingLabelXM = 5.0;
NSString *somethingLabelText = @"Random Text";

CGFloat somethingLabelTextW = [somethingLabelText sizeWithFont:[UIFont systemFontOfSize:12.0] constrainedToSize:CGSizeMake(MAXFLOAT, 1000) lineBreakMode:NSLineBreakByTruncatingTail].width;

// Something text
UILabel *somethingLabel = [[UILabel alloc] initWithFrame:CGRectMake(somethingImageView.frame.origin.x + somethingImageView.frame.size.width + somethingLabelXM, somethingImageView.frame.origin.y, somethingLabelTextW, 40.0)];
somethingLabel.text = somethingLabelText;

UIImage *moreImage = [UIImage imageNamed:@"SomeImage"];

// Image after Something text
UIImageView *moreImageView = [[UIImageView alloc] initWithFrame:CGRectMake(somethingLabel.frame.origin.x + somethingLabel.frame.size.width + somethingLabelXM, somethingImageView.frame.origin.y, moreImage.size.width, moreImage.size.height)];
moreImageView.image = moreImage;

// More text
NSString *moreLabelText = @"Random Text";

CGFloat moreLabelTextW = [moreLabelText sizeWithFont:[UIFont systemFontOfSize:12.0] constrainedToSize:CGSizeMake(MAXFLOAT, 1000) lineBreakMode:NSLineBreakByTruncatingTail].width;

UILabel *moreLabel = [[UILabel alloc] initWithFrame:CGRectMake(moreImageView.frame.origin.x + moreImageView.frame.size.width + somethingLabelXM, somethingImageView.frame.origin.y, moreLabelTextW, 40.0)];
 somethingLabel.text = moreLabelText;