Ios UILabel-resize-won';行不通
我有一个内部带有UILabel的UIVIew,我希望UILabel和UIVIew包装文本内容大小。 因此,我计算文本大小,并将UIView的框架和UIlabel的框架设置为新的高度。 UIView可以完全调整大小,但UILabel无法调整大小。始终保持相同的大小。不知道为什么 这是我的密码:Ios UILabel-resize-won';行不通,ios,uiview,resize,uilabel,frame,Ios,Uiview,Resize,Uilabel,Frame,我有一个内部带有UILabel的UIVIew,我希望UILabel和UIVIew包装文本内容大小。 因此,我计算文本大小,并将UIView的框架和UIlabel的框架设置为新的高度。 UIView可以完全调整大小,但UILabel无法调整大小。始终保持相同的大小。不知道为什么 这是我的密码: [mylabel setNumberOfLines:0]; CGSize maximumLabelSize = CGSizeMake(mylabel.frame.size.width, 160); CGSi
[mylabel setNumberOfLines:0];
CGSize maximumLabelSize = CGSizeMake(mylabel.frame.size.width, 160);
CGSize expectedLabelSize = [text sizeWithFont:mylabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:mylabel.lineBreakMode];
CGRect newFrame = mylabel.frame;
newFrame.size.height = expectedLabelSize.height;
mylabel.frame = newFrame;
mylabel.text = text;
myView.frame = CGRectMake(myView.frame.origin.x,
myView.frame.origin.y,
myView.frame.size.width,
newFrame.size.height);
PD:我正在更改viewDidLayoutSubviews中的帧,我应该在其他地方执行吗
更新:
我正在使用带有一些约束的自动布局。我需要Autolayout,因为我有一个基于导航栏和选项卡栏的应用程序。如果您使用Autolayout,布局约束将决定视图的大小-不建议您使用Autolayout,也不要更改视图框架,因为结果并不总是可预测的 如果只希望UILabel的大小与UIView相同,请确保UILabel具有与UIView相同的高度和宽度约束。 UILabels具有固有大小(标签“应该”的大小)。除非另有限制,否则标签将始终尝试保持其固有大小 视图的高度/宽度应有一定的限制。如果您在Xcode中设置了这些约束,请在控制器中为这些约束设置一个IBOutlet,并更改
常量
属性
如果要为约束中的更改设置动画,请对要更改的约束进行更改,然后调用
[UIView animateWithDuration:.5f animations:^{
[self.view layoutIfNeeded];
}];
调用layoutIfNeeded将导致重新计算自动布局约束。在动画中调用它将为更改的约束设置动画
从外观上看,您想要的是将UILabel约束为与UIView相同的高度/宽度,并在UIView上具有用于高度约束的IBOutlet。将IBOutlet上的
常量
属性更改为所需高度,然后从动画块内部调用layoutifneedd
。如果使用自动布局,布局约束将决定视图的大小-不建议您使用Autolayout并同时更改视图框架,因为结果并不总是可预测的
如果只希望UILabel的大小与UIView相同,请确保UILabel具有与UIView相同的高度和宽度约束。
UILabels具有固有大小(标签“应该”的大小)。除非另有限制,否则标签将始终尝试保持其固有大小
视图的高度/宽度应有一定的限制。如果您在Xcode中设置了这些约束,请在控制器中为这些约束设置一个IBOutlet,并更改常量
属性
如果要为约束中的更改设置动画,请对要更改的约束进行更改,然后调用
[UIView animateWithDuration:.5f animations:^{
[self.view layoutIfNeeded];
}];
调用layoutIfNeeded将导致重新计算自动布局约束。在动画中调用它将为更改的约束设置动画
从外观上看,您想要的是将UILabel约束为与UIView相同的高度/宽度,并在UIView上具有用于高度约束的IBOutlet。将IBOutlet上的
常量
属性更改为所需高度,然后从动画块内部调用layoutifneedd
。该代码看起来应该可以正常工作。您是否在代码中的其他位置调整标签框,这可能会覆盖您在此处执行的操作?不是真的:S,我正在使用自动布局,可能是这导致了问题。我从未使用过自动布局,因此我在这方面没有帮助。该代码看起来应该可以正常工作。您是否在代码中的其他任何位置调整标签框,这可能会覆盖您在此处所做的操作?不是真的:S,我使用的是自动布局,可能是这导致了问题。我从未使用过自动布局,因此我在这方面没有帮助。回答得非常好,并消除了我的所有疑问!我将尝试约束方法,看看它是如何进行的。非常感谢。在按代码编辑尺寸时,必须删除autolayout以停止出现问题+回答得很好,消除了我所有的疑虑!我将尝试约束方法,看看它是如何进行的。非常感谢。在按代码编辑尺寸时,必须删除autolayout以停止出现问题+1.