Iphone 如何在不同的UILabel方向设置UILabel的位置
我有一个视图,我通过编程创建了一个UILabel,并将其称为我的参数传递,因为我需要许多具有不同位置框架的UILabel文本,所以我通过参数传递来调用它 使用下面的代码,当我旋转到横向模式时,纵向视图标签仍然显示。我如何克服这个问题?我需要在下面的代码中完成。我希望标签框的位置从纵向视图更改为横向视图 注意:我需要创建许多标签,大约15到20个,所以我使用参数传递,所以我不需要为创建每个标签编写那么多方法Iphone 如何在不同的UILabel方向设置UILabel的位置,iphone,objective-c,ios,Iphone,Objective C,Ios,我有一个视图,我通过编程创建了一个UILabel,并将其称为我的参数传递,因为我需要许多具有不同位置框架的UILabel文本,所以我通过参数传递来调用它 使用下面的代码,当我旋转到横向模式时,纵向视图标签仍然显示。我如何克服这个问题?我需要在下面的代码中完成。我希望标签框的位置从纵向视图更改为横向视图 注意:我需要创建许多标签,大约15到20个,所以我使用参数传递,所以我不需要为创建每个标签编写那么多方法 -(UILabel*)createLabel:(CGRect)frame :(NSStri
-(UILabel*)createLabel:(CGRect)frame :(NSString*)labelTitle
{
UILabel *myLabel = [[UILabel alloc] initWithFrame:frame];
[UIFont fontWithName:@"Arial" size:13];
myLabel.text = labelTitle;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
[self.view addSubview:[self createLabel:CGRectMake(450,140,60,20):@"Ratings:"]];
[self.view addSubview:[self createLabel:CGRectMake(450,170,60,20):@"Reviews:"]];
}
else
{
[self.view addSubview:[self createLabel:CGRectMake(650,140,60,20):@"Ratings:"]];
[self.view addSubview:[self createLabel:CGRectMake(650,170,60,20):@"Reviews:"]];
}
return YES;
}
纵向标签仍会显示,因为每次旋转设备时,您都会添加一个新标签,而不会删除旧标签
我认为创建新标签不是一个好主意,而您可以只更改现有标签的框架。为此,您应该向类中添加两个属性(例如reviewLabel和ratingLabel),并在首次创建标签时将标签指定给它们。然后在shouldAutorotate函数中,您可以访问这些标签并更改其边框。不要在shouldAutorotateToInterfaceOrientation中创建它们,因为每次方向更改时都会调用它,从而创建更多标签 而是在
-(void)loadView
中创建一次,并为其提供正确的autoResizingMask属性,例如:
myLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth ;
当方向改变时,这将导致所需的行为:标签将自动调整大小,整个旋转动画将平滑
PS:请注意,您创建标签的方式会导致内存泄漏,请使用
release
方法来防止这种情况。我可以有一个示例代码吗..因为我是iphone开发新手..还有一个问题是我需要在15个左右创建多个标签,所以我需要所有标签的属性吗…?如果您有那么多标签,为它们中的每一个拥有一个属性是不太实际的。按照Wolfert的建议,通过设置自动重新定位任务,尝试正确地布置它们。也可以使用视图标记。在创建时设置每个标签的标记,如myLabel.tag=10
,并使用myLabel=[self.view viewWithTag:10]
在shouldAutorotate函数中检索标签;myLabel=[[UILabel alloc]initWithFrame:frame];[UIFont fontWithName:@“Arial”大小:13];myLabel.text=标签标题;但它显示了未声明的LabelTitle在调用下面的函数时如何分配LabelTitle-(BOOL)shouldAutorot if(interfaceOrientation==UIInterfaceOrientationAndScapeLeft | | interfaceOrientation==UIInterfaceOrientationAndScapeRight){myLabel.frame=CGRectMake(600140,60,20);myLabel.text=@“Ratings:;}elseThats因为您将LabelTitle作为参数发送给createLabel方法,所以如果不传递它,则无法访问它。相反,您可以使用myLabel.text=@“我写了myLabel.text=@“评级”;并调用(BOOL)ShouldnautoRotate方法中显示的以下代码,但仍在运行其抛出异常(BOOL)ShouldnautoRotate{myLabel.frame=CGRectMake(600140,60,20);myLabel.text=@“Ratings:”;请阅读我的第一个awnser并从该方法执行。或/dev/null