以编程方式创建的标签和图像不会显示在屏幕上

时间:2011-03-23 17:18:31

标签: iphone uiscrollview autoscroll

我有以下应用程序,就像聊天一样,所以我以编程方式创建了一些标签,图像和按钮。
问题是,我在启动时添加的那些确实显示,而我之后添加的那些不显示 这就像视图需要刷新或其他东西。 如果我从IBAction设置为按钮调用相同的绘图功能...它显示内容.. 如果它来自寻找新事件的线程事件并通过以下方式通知该类:

[[NSNotificationCenter defaultCenter] postNotificationName:@"NewMessageNotification" object:self userInfo:values];  
然后它没有显示任何内容。 但实际上调用了该函数(我已经使用调试器检查过)可能是因为它没有使用正确的视图实例吗?

这是我的布局:

enter image description here

这是我创建控件的函数:

    UILabel *labelMessage = [[UILabel alloc] initWithFrame:CGRectMake(left+5, lastcalculatedHeight-5, 220, calculatedHeight)];           
    [labelMessage setText:msg];
    [labelMessage setFont:[UIFont fontWithName:@"Arial" size:12.0]];
    [labelMessage setLineBreakMode:UILineBreakModeWordWrap];
    [labelMessage setTextColor:[UIColor blackColor]];
    [labelMessage setAdjustsFontSizeToFitWidth:NO];
    [labelMessage setNumberOfLines:floor( msg.length / 40 )+2];
    [labelMessage setBackgroundColor:[UIColor clearColor]];
    [scrollView addSubview:labelMessage];
    [labelMessage release];


    UIButton *buttonTime = [[UIButton alloc] initWithFrame:CGRectMake(left, lastcalculatedHeight+40, 50, 20)];  
    [buttonTime setBackgroundImage:[[UIImage imageNamed:@"hour_bubble.png"] stretchableImageWithLeftCapWidth:9 topCapHeight:13] forState:UIControlStateDisabled];
    [buttonTime setFrame:CGRectMake(left_hour_button, lastcalculatedHeight+calculatedHeight-30, 55, 25)];
    [buttonTime setTitle:date2 forState:UIControlStateDisabled];                
    [buttonTime setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];
    buttonTime.titleLabel.font=[UIFont fontWithName:@"Helvetica" size:8.0]; 
    buttonTime.titleLabel.lineBreakMode= UILineBreakModeWordWrap;
    [buttonTime setEnabled:FALSE];
    [scrollView addSubview:buttonTime];
    [buttonTime release];

当我调用这个函数时,我也想将uiscrollview自动滚动到底部..但它失败了,就像模拟器在我调用以下内容时会变得疯狂: 我尝试使用

CGPoint offset = CGPointMake(0,lastcalculatedHeight);
[scrollView setContentOffset: offset animated: YES];

我是从这里得到的 UIScrollView scroll to bottom programmatically

1 个答案:

答案 0 :(得分:0)

您描述的行为听起来像是您的通知未在主线程上发送;所有UI更新必须在主线程上完成。有关解决此问题的一些代码,请参阅my answer to your other question