Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UILabel-resize-won';行不通_Ios_Uiview_Resize_Uilabel_Frame - Fatal编程技术网

Ios UILabel-resize-won';行不通

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

我有一个内部带有UILabel的UIVIew,我希望UILabel和UIVIew包装文本内容大小。 因此,我计算文本大小,并将UIView的框架和UIlabel的框架设置为新的高度。 UIView可以完全调整大小,但UILabel无法调整大小。始终保持相同的大小。不知道为什么

这是我的密码:

[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.