Ios UILabel-设置旋转时的帧
我知道如何在旋转时更改UILabel的框架 我的问题是,当一个UILabel是另一个UIView的子视图(即启用分页的scrollView的子视图)时,是否有智能方法在旋转时将UILabel居中 考虑这一点: ScrollView-->3个UIView(3页)-->每个UIView都有一个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
[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
)