2014-01-14 64 views
0

我试图根据文本中的文本重新调整大小(或者我允许ie108的最大宽度),并在它旁边放置一个按钮,下面的代码实际上在调试时给出满意的结果,但标签的宽度不是相应地改变。 是否有任何特殊设置可以在xib或其他任何东西中做请帮助Iam动态调整UILabel的大小,但不起作用。

 NSDictionary *[email protected]{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.

回答

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来获得框架的右边缘。

+0

是自动布局已启用,不知道这一点。谢谢,这是一个巨大的帮助。并且还提供了小费。 –

-1

尝试以下;

[locFeedcell.lbl_location setFrame:newLabelframe]; 
    [locFeedcell.btn_map setFrame:newButtonFrame]; 
+0

这相当于'locFeedcell.lbl_location.frame = newLabelframe; locFeedcell.btn_map.frame = newButtonFrame;' – Tobi

0

我在代码中看不到任何逻辑问题。有两件事你可能会检查:

  1. 将最大宽度更改为两倍或更宽,使更改更明显,因此可以更容易验证;
  2. 确保在UI框架中设置新框架时处于UI线程中。
+0

它实际上经过我验证,我说我通过调试点验证了它。 –

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

您将需要3个约束:

  1. 设置你最近添加标签的固定位置:

| -X- [lbl_recentlyAt]

  1. 设置位置标签和按钮的位置变化,让我们用20p空间表示

[lbl_recentlyAt] -20- [lbl_loc通货膨胀] -20- [btn_map]

您可能需要拨打您的手机的setNeedsLayout方法时lbl_location宽度的变化来更新布局:https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instm/UIView/setNeedsLayout

[cellView setNeedsLayout] 

希望这有助于!

+0

自动布局确实有帮助,但我试图用简单的方法做到这一点...使用自动layot对我来说是一件复杂的事情......但是对于知识分享来说,thnkyou ** @ adepablor **。它可能会帮助我在未来的某个地方。 –

+0

欢迎您使用任何您认为更容易的方法。但我的建议是,现在或在可预见的将来,仔细阅读我发布的自动布局链接。它会花费你不到一个小时,你会发现它并不那么复杂!另外,您可以在故事板中添加约束条件,这意味着更少的代码,这意味着更少的错误,这太棒了! :) – adepablor

0

//用这个自定义字体

CGFloat的宽度= [label.text sizeWithFont:[UIFont fontWithName:@ “ChaparralPro粗体” 尺寸:40]。宽度;

//用这个系统字体

CGFloat的宽度= [label.text sizeWithFont:[UIFont systemFontOfSize:40]。宽度;

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

//point.x,point.y - > origin for label;

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

+0

大小与字体已弃用先生,我有什么用途是相同的.. –