动态调整UILabel的大小,但它不起作用。

时间:2014-01-14 14:53:44

标签: ios iphone ios5 ios4 ios6

我正在尝试根据文本中的文本重新调整标签大小(或者我允许的最大宽度为ie108)并在其旁边放置一个按钮,下面的代码在调试时实际上给出了令人满意的结果但是标签的宽度是没有相应改变。 在xib或其他任何事情中是否有任何特殊设置请帮助Iam

        NSDictionary *attrib=@{NSFontAttributeName:locFeedcell.lbl_location.font};
        CGFloat width=[locFeedcell.lbl_location.text sizeWithAttributes:attrib].width;
        CGRect newLabelframe=locFeedcell.lbl_location.frame;
        CGRect newButtonFrame=locFeedcell.btn_map.frame;
        if (width>=108.00f) {
            newLabelframe.size.width=108.00;
        } else {
            newLabelframe.size.width=width;
            newButtonFrame.origin.x=locFeedcell.lbl_location.bounds.origin.x+width+4.00;
        }
        locFeedcell.lbl_location.frame=newLabelframe;
        locFeedcell.btn_map.frame=newButtonFrame; 

这里是xib文件的快照。

here is snapshot of xib file.

4 个答案:

答案 0 :(得分:1)

更新而不是使用locFeedcell.lbl_location.bounds.origin.x+width使用locFeedcell.lbl_location.frame.origin.x+widthbounds.origin.x始终为0

您的.xib文件中是否启用了自动布局?检查实用程序窗格中的文件检查器选项卡。 如果这没有帮助,您可以在设置之前和之后发布帧的值吗?记住标签和按钮的内存地址,并在布置好所有内容后再次打印它们的框架。

快速提示: 您可以使用CGRectGetMaxX(locFeedcell.lbl_location.frame)代替locFeedcell.lbl_location.bounds.origin.x+width来获取框架的右边缘。

答案 1 :(得分:0)

我的代码中没有任何逻辑问题。您可以检查两件事:

  1. 将最大宽度更改为两倍或更宽,以使更改变得明显,因此可以更轻松地进行验证;
  2. 将新框架设置为UI元素时,请确保您处于UI线程中。

答案 2 :(得分:0)

使用Autolayout约束怎么样?

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/Introduction/Introduction.html

你有3个对象:

  1. 最近在 - >我们称之为lbl_recentlyAt
  2. lbl_location
  3. btn_map
  4. 您需要3个约束:

    1. 设置最近添加标签的修复位置:
    2.   

      | -X- [lbl_recentlyAt]

      1. 设置位置标签和按钮的可变位置,假设使用20p空格
      2.   

        [lbl_recentlyAt] -20- [lbl_location] -20- [btn_map]

        当lbl_location宽度更改以更新布局时,您可能需要调用单元格的setNeedsLayout方法:https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instm/UIView/setNeedsLayout

        [cellView setNeedsLayout]
        

        希望这有帮助!

答案 3 :(得分:0)

//将此用于自定义字体

CGFloat width = [label.text sizeWithFont:[UIFont fontWithName:@“ChaparralPro-Bold”size:40]] .width;

//将此用作系统字体

CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:40]]。width;

label.frame = CGRectMake(point.x,point.y,width,height);

// point.x,point.y - >标签的来源;

// height - >你的标签高度;