Iphone 如何在不同的UILabel方向设置UILabel的位置

Iphone 如何在不同的UILabel方向设置UILabel的位置,iphone,objective-c,ios,Iphone,Objective C,Ios,我有一个视图,我通过编程创建了一个UILabel,并将其称为我的参数传递,因为我需要许多具有不同位置框架的UILabel文本,所以我通过参数传递来调用它 使用下面的代码,当我旋转到横向模式时,纵向视图标签仍然显示。我如何克服这个问题?我需要在下面的代码中完成。我希望标签框的位置从纵向视图更改为横向视图 注意:我需要创建许多标签,大约15到20个,所以我使用参数传递,所以我不需要为创建每个标签编写那么多方法 -(UILabel*)createLabel:(CGRect)frame :(NSStri

我有一个视图,我通过编程创建了一个UILabel,并将其称为我的参数传递,因为我需要许多具有不同位置框架的UILabel文本,所以我通过参数传递来调用它

使用下面的代码,当我旋转到横向模式时,纵向视图标签仍然显示。我如何克服这个问题?我需要在下面的代码中完成。我希望标签框的位置从纵向视图更改为横向视图

注意:我需要创建许多标签,大约15到20个,所以我使用参数传递,所以我不需要为创建每个标签编写那么多方法

-(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