在 iphone sdk 的单行上对齐两个不同的文本

Posted

技术标签:

【中文标题】在 iphone sdk 的单行上对齐两个不同的文本【英文标题】:Align two different text on single line in iphone sdk 【发布时间】:2013-05-14 12:15:45 【问题描述】:

我有一个UILabel 和一个UIButton,除了UILabel 之外,文本正在动态变化,我想将它们显示为单个标签,并且应该在单行上居中对齐,但正如我展示的那样,两者的工作方式不同图片中的下划线文字“无麸质美食家”具有可点击的功能,不同于文字Found by。我不知道如何完成这项任务,如果图片中的按钮文本“无麸质美食家”会变得很长,那么我如何将标签向左移动,如图所示。提前致谢。

【问题讨论】:

您需要为此保留单独的 UILables。 我按照你的建议做同样的事情,这也是我的要求,但为此我无法在一行上居中对齐。 使用TTTAttributedLabel。正是你需要的 【参考方案1】:

试试这个:

NSString *text1 = @"Found by ";  //text of your uilabel
CGSize constraint1 = CGSizeMake(320, 2000);   //suppose your total width of superview is 320
CGSize size1 = [text1 sizeWithFont:[UIFont fontWithName:@"ArialMT" size:12.0] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];   //font which are used in your "Found by" label


NSString *text2 = @"The Gluten free foodie";  //text of your uibutton
CGSize constraint2 = CGSizeMake(320, 2000);
CGSize size2 = [text2 sizeWithFont:[UIFont fontWithName:@"Arial-BoldMT" size:12.0] constrainedToSize:constraint2 lineBreakMode:UILineBreakModeWordWrap];    //font which are used in your "The Gluten free foodie" button

float finalwidth = size1.width + size2.width + 2;
float centerx = 320 - finalwidth;      //suppose your total width of view is 320
centerx = centerx/2.0;

lblFoundBy.frame = CGRectMake(centerx, 20, size1.width, size1.height);
btnThe.frame = CGRectMake(centerx + size1.width + 2, 20, size2.width, size2.height);
    根据标签的文本查找标签的宽度 根据按钮的标题查找按钮的宽度 获取标签、按钮和两者之间的空间的总宽度。 从 uiview(按钮和标签的超级视图)宽度中减去总宽度(假设为 320)。 最后你得到了额外的空间。之后,这个额外的空间除以 2。 最后,根据该设置设置标签和按钮的框架(x 位置很重要)。

【讨论】:

很好,很好的描述,并在您的帖子的帮助下找到了解决方案。谢谢sssssssssssssssssssssssssssss。【参考方案2】:

如果这个应用程序适用于 ios6 或更高版本在这种情况下你可以这样做......

NSString *infoString=@"Founded by The Gluten free foodie";

    NSMutableAttributedString *attString=[[NSMutableAttributedString alloc] initWithString:infoString];
    NSInteger _stringLength=[infoString length];

// ------------------ Give your range for underline 
    [attString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:1] range:NSMakeRange(10, _stringLength-10)];

    label.attributedText = attString;

    [label setBackgroundColor:[UIColor clearColor]];

// ---------------- Give frame according to your text -------
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(70, 15, 195, 35);

    [btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];

    [label addSubview:btn];

    [label setUserInteractionEnabled:YES];

在这张图片中看到

【讨论】:

【参考方案3】:

您可以尝试使用 TTTAttributedLabel(https://github.com/mattt/TTTAttributedLabel) 或其他可以支持链接的自定义标签,您可以使用 The Gluten free foodie 的链接属性来显示它的下划线。

【讨论】:

【参考方案4】:

您可以使用两个标签。第一个的宽度将是固定的。使用以下方法计算第二个宽度。

[[label text] sizeWithFont:label.font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

浏览苹果文档并了解它是如何工作的。获得宽度后,您可以为两者提供框架。两个标签的宽度之和为 160/2,第一个标签为 x。第一个标签的 x + 宽度为第二个标签提供 x。

【讨论】:

以上是关于在 iphone sdk 的单行上对齐两个不同的文本的主要内容,如果未能解决你的问题,请参考以下文章

css - 垂直对齐

iPhone sdk如何使用分段控件显示的两个不同视图设置视图方向

iPhone SDK:卡在两个视图应用程序上

iPhone X 将对象底部对齐到安全区域废墟在其他设备上的外观

如何使用 iphone SDK 中的两个按钮在运行时更改应用程序语言?

有没有办法可以在 iPhone SDK 上制作叠加视图?