2016-08-03 20 views
0

Benutzen Sie den Code für die Show Download Fortschritt in ProzentFortschritte in Etikett

float progress = [[NSNumber numberWithInteger:totalBytesWritten] floatValue]; 
     float total = [[NSNumber numberWithInteger: totalBytesExpectedToWrite] floatValue]; 

     NSString *percentage = [NSString stringWithFormat:@"%d%%", (int)((progress/total)*100)]; 
     [_label setText:[NSString stringWithFormat:@"%@%%", percentage]]; 
_label = [[UILabel alloc]initWithFrame:CGRectMake(323.43, 148.84, 42, 19)]; 
     [_label setText: percentage]; 
     _label.numberOfLines = 1; 
     _label.baselineAdjustment = UIBaselineAdjustmentAlignBaselines; 
     _label.adjustsFontSizeToFitWidth = YES; 
     _label.minimumScaleFactor = 10.0f/12.0f; 
     _label.clipsToBounds = YES; 
     _label.backgroundColor = [UIColor blackColor]; 
     _label.textColor = [UIColor whiteColor]; 
     _label.textAlignment = NSTextAlignmentCenter; 
     [self.view addSubview:_label]; 

Wenn ich _label.backgroundColor = [UIColor blackColor]; Fortschritt Label Arbeit richtig zu verwenden. Aber wenn ich _label.backgroundColor = [UIColor clearColor]; Zahlen übereinander überlagern

Warum?

_label.backgroundColor = [UIColor blackColor]; enter image description here

_label.backgroundColor = [UIColor clearColor];enter image description here

+0

Wenn jemand die Antwort Ihr Problem gelöst, könnte man es als Antwort akzeptieren wollen das große Checkbox. – Juan

Antwort

0

Sie fügen multiple Etiketten mit der Methode [self.view addSubview: _label] hinzu Wenn Sie das visuell sehen möchten, verwenden Sie die Debug View Hierarchy, wenn Sie debuggen. Um das Problem zu beheben, können Sie überprüfen, ob das Label nicht gleich Null ist und nur den Text festlegen. Sehen Sie den Code unten:

float progress = [[NSNumber numberWithInteger:totalBytesWritten] floatValue]; 
    float total = [[NSNumber numberWithInteger:totalBytesExpectedToWrite] floatValue]; 

    NSString *percentage = [NSString stringWithFormat:@"%.f%%", ((progress/total) * 100)]; 

    if (!_label) { 

     _label = [[UILabel alloc] initWithFrame:CGRectMake(323.43, 148.84, 42, 19)]; 

     _label.numberOfLines = 1; 
     _label.baselineAdjustment = UIBaselineAdjustmentAlignBaselines; 
     _label.adjustsFontSizeToFitWidth = YES; 
     _label.minimumScaleFactor = 10.0f/12.0f; 
     _labellabel.clipsToBounds = YES; 
     _label.backgroundColor = [UIColor blackColor]; 
     _label.textColor = [UIColor whiteColor]; 
     _label.textAlignment = NSTextAlignmentCenter; 

     [self.view addSubview:_label]; 
    } 

    _label.text = percentage; 

Beachten Sie, dass Sie versuchen, den Text zu setzen, bevor initialisieren: [_label setText:[NSString stringWithFormat:@"%@%%", percentage]]; und wenn _label nil der App Absturz in diesem Punkt ist. Versuchen Sie zu vermeiden, den Rahmen manuell zu setzen, anstatt das automatische Layout zu verwenden.

+1

Im Gegensatz zu Swift stürzt das Aufrufen einer Methode für 'nil' nicht in Objective-C ab; es tut einfach nichts und kann zu kleinen Fehlern führen. – Paulw11

0

Sie erscheinen mehrere Etiketten [self.view addSubview: _label] zu hinzufügen. Dieser Code sollte nur einmal ausgeführt werden. Mit einem schwarzen Hintergrund sehen Sie nur das oberste Etikett. Mit einem klaren Hintergrund können Sie sie alle sehen

0

Ich denke, das Etikett hat sich überlappen. Sie können also den Wert "tag" verwenden, um das Etikett zu entfernen und jedes Mal neu zu erstellen.

Hinzufügen Tag

_label = [[UILabel alloc] initWithFrame:CGRectMake(323.43, 148.84, 42, 19)]; // after you will set the tag for the required Label. 
_label.tag = 505; 

Entfernen und neu das Etikett

[[self.view viewWithTag:505]removeFromSuperView]; // after you will create the Label 
_label = [[UILabel alloc] initWithFrame:CGRectMake(323.43, 148.84, 42, 19)];