Ios UILabel-设置旋转时的帧

Ios UILabel-设置旋转时的帧,ios,objective-c,uiview,rotation,Ios,Objective C,Uiview,Rotation,我知道如何在旋转时更改UILabel的框架 我的问题是,当一个UILabel是另一个UIView的子视图(即启用分页的scrollView的子视图)时,是否有智能方法在旋转时将UILabel居中 考虑这一点: ScrollView-->3个UIView(3页)-->每个UIView都有一个UILabel子视图 在纵向中,一切都很好,在旋转时,我必须明确设置每个标签的框架 我尝试添加: [myLabel setAutoresizingMask:UIViewAutoresizingFlexi

知道如何在旋转时更改UILabel的框架

我的问题是,当一个UILabel是另一个UIView的子视图(即启用分页的scrollView的子视图)时,是否有智能方法在旋转时将UILabel居中

考虑这一点:

ScrollView-->3个UIView(3页)-->每个UIView都有一个UILabel子视图

在纵向中,一切都很好,在旋转时,我必须明确设置每个标签的框架

我尝试添加:

    [myLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin |  UIViewAutoresizingFlexibleRightMargin];
但这不起作用,我只希望标签在UIView中居中,无论旋转如何。 UIView已经正确调整了自身大小

我确实试着用了一些大致如下的东西:

        [myLabel setCenter:CGPointMake(myView.frame.size.width / 2, myView.frame.size.height / 2)];
并将其放入方法中: -(无效)将AnimateRotationInterfaceOrientation:(UIInterfaceOrientation)更改为InterfaceOrientation持续时间:(NSTimeInterval)持续时间

但是,这并不能很好地工作,因为UIView本身在旋转时会调整大小


谢谢

不确定滚动视图是否会影响我的回答。但是,如果您只想将UILabel在其superview中居中(水平),那么下面的代码将起作用

-(void)viewDidLoad {
    // Init the label
    // Assume that you want its size to be 100 x 30
    // And its superview is v0
    label.frame = CGRectMake((v0.width - 100) / 2, 10, 100, 30);
    label.autoresizingMask = UIViewAutoresizingMaskFlexibleLeftMargin | UIViewAutoresizingMaskFlexibleRightMargin;
    [v0 addSubview:label];

    // No need of handling rotation explicitly anywhere else
}
注意使用了
v0.width
:虽然在加载视图时该值可能为零,但该方法仍然有效。初始值实际上并不重要

如果您需要执行一些特殊的
autoresizingMask
无法帮助的操作,只需覆盖
layoutSubviews
,在发生旋转时调用它即可。最后一种解决方案是观察视图的
frame
属性(例如,如果您没有使用UIViewController并且手头没有
layoutSubview