移动UILabel的位置为UITableViewCell

时间:2014-10-21 13:38:54

标签: ios objective-c uitableview uilabel

我有一个UITableView,里面有很多单元格。其中还有一些带有图像的标签。但是图像不在每个单元格中,所以我有一个if语句来检查它是否应该被隐藏,如果是,我需要将标签更改为左侧。我可以使用此代码。

   if (checking here not relevant) { 

        cell.liveButton.hidden = YES;

        CGRect frame = cell.gameTimeLabel.frame;
        frame.origin.x= 27;                         // move the label 10px to the left since no image will be present
        cell.gameTimeLabel.frame= frame;
        NSLog(@"in here");   // Checking if this code actually runs
   }

因此,当我启动我的应用程序时,标签尚未更改(但它打印出消息"在这里"),然后我有一个计时器,每10秒运行一次重装表。并且下次当控制台再次打印时它会自动更新"在这里"然后标签改变了位置。为什么这样,我如何解决这个问题,以便第一次更改标签?

感谢所有帮助!!

- (void) startTimer{

    [timer invalidate];

    timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(retrieveData) userInfo:nil repeats:YES];
}

- (void) retrieveData{

    gamesInfoArray = [gamesInfoObject fetchData];  

    [self.tableView reloadData];
}

并在我调用函数来获取json信息的其他类

-(void) fetchData{

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setHTTPMethod:@"GET"];
    [request setURL:[NSURL URLWithString:url]];

    NSError *error = [[NSError alloc] init];
    NSHTTPURLResponse *responseCode = nil;

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error];

    if([responseCode statusCode] != 200){
        NSLog(@"Error getting %@, HTTP status code %li", url, (long)[responseCode statusCode]);
    }

    jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

} 

2 个答案:

答案 0 :(得分:0)

将左约束添加到标签。为这个约束做出决定。

constLabelLeft.constant = 10; // default 30 maybe
[cell.view needsUpdateConstraints];

答案 1 :(得分:0)

在重新加载数据后,在viewdidload中添加一个漂亮而简单的自定义动画,例如:

    [yourtable reloadData];

    CATransition *transition = [CATransition animation];
    transition.type = kCATransitionPush; //Change here the transition type
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.fillMode = kCAFillModeForwards;
    transition.duration = 0.5;
    transition.subtype = kCATransitionMoveIn; //Change here the animation to present again the cells

    [[yourtable layer] addAnimation:transition forKey:@"UITableViewReloadDataAnimationKey"];

这样,重用单元格会更新,有点棘手,但可以为你工作。您可以更改过渡的类型以获得其他类型的动画。