UILabel - 旋转时设置框架

时间:2013-06-22 14:29:52

标签: ios objective-c uiview rotation

知道如何在旋转时更改UILabel的帧。

我的问题是,当UILabel是另一个UIView的子视图时,它是启用分页的scrollView的子视图,是否有智能方式将uilabel置于旋转中心?

考虑一下:

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

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

我尝试添加:

    [myLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin |  UIViewAutoresizingFlexibleRightMargin];

但是这不起作用,我只想让标签以UIView为中心,无论旋转是什么。 UIViews已经正确调整自己的大小。

我确实尝试过使用以下内容:

        [myLabel setCenter:CGPointMake(myView.frame.size.width / 2, myView.frame.size.height / 2)];

并将其放在方法中:      - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

然而这并不顺利,因为UIViews会自行调整大小。

由于

1 个答案:

答案 0 :(得分:2)

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

-(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并且手头没有layoutSubviews ...)