簡體   English   中英

如何在iOS中為多個動態按鈕和標簽設置自動布局?

[英]how Set autolayout for multiple dynamic buttons and labells in iOS?

我在應用程序中創建了83個動態按鈕,並為此設置了標簽。 現在,我想為它設置自動布局。 如何為此動態設置自動布局?

這是我實現的用於動態創建按鈕和標簽的代碼:

-(void)DynamicButton
{
    //Reading Data From database
    NSMutableArray *objectName = [[NSMutableArray alloc] init];
    NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDir = [docPaths objectAtIndex:0];
    self.databasePath = [documentDir stringByAppendingPathComponent:@"SMS.sqlite"];

    FMDatabase *database = [FMDatabase databaseWithPath:self.databasePath];
    [database setLogsErrors:TRUE];
    [database open];

    //FMResultSet *results = [database executeQuery:@"SELECT * FROM SMSCategory"];
    NSString *anQuery = [[NSString alloc]initWithFormat:@"SELECT *FROM SMSCategory"];

    FMResultSet *results = [database executeQuery:anQuery];

    while ([results next]) {
        SMSCat1 *cat = [[SMSCat1 alloc]init];
        cat.Id = [results stringForColumn:@"Id"];
        cat.Name = [results stringForColumn:@"Name"];
        cat.IsActive = [results stringForColumn:@"IsActive"];
        [objectName addObject:cat];
    }
    [database close];


    //Adding dynamic buttons


    int yPossion = 150, xPossion = 44; int temp = 0;
    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];
    [self.view addSubview:scrollView];
    for (int i = 0; i < [objectName count]; i++) {
        SMSCat1 *cat = [objectName objectAtIndex:i];

        UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [aButton setTranslatesAutoresizingMaskIntoConstraints:YES];


        //Label Dynamic Code

        UILabel *label =  [[UILabel alloc] init];
        [label setText:cat.Name];
        [label setTextColor:[UIColor brownColor]];
        label.font = [UIFont systemFontOfSize:12];

        [label sizeToFit];

        [label setFrame:CGRectMake(5, 44, 70, 60)];
        [scrollView addSubview:label];
        [aButton addSubview:label];





        [aButton setBackgroundColor:[UIColor blackColor]];
        [aButton setBackgroundImage:[UIImage imageNamed:@"icon-menu.png"] forState:UIControlStateNormal];

        [aButton setTitle:[NSString stringWithFormat:@"%d", i] forState:UIControlStateNormal];

        [aButton setFrame:CGRectMake(xPossion, yPossion, 70, 60)];
        aButton.highlighted = YES;

        [scrollView addSubview:aButton];

        xPossion += aButton.frame.size.width + 35;
        temp++;
        if (temp == 3) {
            yPossion = aButton.frame.origin.y + aButton.frame.size.height + 20;
            temp = 0;
            xPossion = 44;
            yPossion += aButton.frame.size.width - 15;
            [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, yPossion - 50)];
        }
    }
}

為此使用自動布局時,您要設置setTranslatesAutoresizingMaskIntoConstraints:NO 這使您可以使用自己的約束來設置對象的位置。 使用自動布局放置對象時,您實際上並不關心框架。 您要相對於其周圍的對象或其父視圖放置對象。 例如,您可以執行以下操作:

NSDictionary* views = @{@"label1":label1,@"button1":button};
  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[label1]-(10)-[button1]" options:0 metrics:nil views:views]];
  [self.view addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:button attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];

這會將兩個元素設置為10個像素,並垂直居中。 我不會遍歷您的代碼並將其全部更改為自動布局,但是您會在示例中看到如何開始使用自動布局對對象進行布局

對於(int i = 0; i <[list count]; i ++)

    id val=[list objectAtIndex:i];
    CGFloat val1=[val floatValue];
    UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(x, 0,107,40)];  
    newLabel.text=[NSString stringWithFormat:@"%@",list[i]];
    newLabel.textAlignment = NSTextAlignmentCenter;
    newLabel.backgroundColor = [UIColor greenColor];
    newLabel.layer.borderColor = [UIColor whiteColor].CGColor;
    newLabel.layer.borderWidth = 2;
    [self.view addSubview:newLabel];
    x=x+newLabel.frame.size.width;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM