web-dev-qa-db-fra.com

Gardez le remplissage UITableView sur l'en-tête mais pas dans le séparateur sur IOS7

avec la transition sur iOS7, le séparateur a un rembourrage de 15 pixels à gauche. Je sais que je peux supprimer ce remplissage avec la fonction d'insertion de séparateur sur le paramètre UITableView dans le fichier xib, mais j'ai besoin de garder le titre du texte avec un remplissage. Comment faire?

défaut:

enter image description here

avec incrustation de séparateur personnalisée à 0:

enter image description here

je dois garder les séparateurs comme la figure 2, mais l'en-tête avec "2013" comme l'image 1.

24
Alessio Crestani

pour Seperator, vous pouvez le configurer via Storyboard

et pour l'en-tête, créez un en-tête personnalisé comme celui-ci

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
  UIView *viewHeader = [UIView.alloc initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 28)];
  UILabel *lblTitle = [UILabel.alloc initWithFrame:CGRectMake(6, 3, 136, 21)];

  [lblTitle setFont:[UIFont fontWithName:@"HelveticaNeue" size:13]];
  [lblTitle setTextColor:[UIColor blackColor]];
  [lblTitle setTextAlignment:NSTextAlignmentLeft];
  [lblTitle setBackgroundColor:[UIColor clearColor]];
  [viewHeader addSubview:lblTitle];

  return viewHeader;
}

lui donner une hauteur particulière. et donnez-lui n'importe quel texte. faire un tableau pour les en-têtes de section qui contiendra vos années.

15
Xeieshan

UTILISATION Swift AND STORYBOARD

Dans le storyboard, vous pouvez définir différentes insertions de séparateur pour le TableView (en-tête) et pour les cellules (séparateurs).

Définissez l'encart de séparation pour la cellule sur 0, en sélectionnant la cellule dans Storyboard et en définissant les paramètres suivants:

enter image description here

Ensuite, définissez le séparateur pour le TableView (pour l'en-tête) sur 15, en sélectionnant le TableView dans Storyboard et en définissant les paramètres suivants:

enter image description here

FACULTATIF:

Vous devrez peut-être également définir les marges sur les cellules à zéro par programme pour vous assurer que le séparateur va de gauche à droite. Utilisez ce code si nécessaire dans le fichier Swift de votre contrôleur de vue de table:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("YOURCELL", forIndexPath: indexPath) as! UITableViewCell

    // THIS IS THE IMPORTANT PART...
    cell.layoutMargins = UIEdgeInsetsZero
    cell.preservesSuperviewLayoutMargins = false

    return cell

}
46
Neiman Aleksei

UITableView a une méthode déléguée nommée viewForHeaderInSection. Si vous supprimez le remplissage et dans la méthode déléguée, ajoutez un remplissage et retournez la vue d'en-tête de section.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(tableView.frame), 30)];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(15, 5, 200, 25)];

    // 15 pixel padding will come from CGRectMake(15, 5, 200, 25).
    label.text = @"2013";
    [view addSubview: label];
    return view;
}

Vous pouvez concevoir votre vue d'en-tête comme vous le souhaitez. Pour définir la hauteur de l'en-tête tableView, utilisez:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

J'espère que cela vous aide ...)

2
Rashad

Si vous souhaitez mettre en retrait le texte de la section à partir de la marge de gauche, voici une manière simple de le faire. Dans la fonction, voir l'espace après le premier guillemet? Mettez juste autant d'espaces que nécessaire avant le début du texte.

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let title: UILabel = UILabel()

        title.text = " \(sortedSections[section])"
        title.textAlignment = NSTextAlignment.Left

        return title
    }
1
D. Rothschild

Vous pouvez définir des encarts sur le tableau (et en-tête/pied de page) et sur la cellule elle-même:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{    
    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsMake(0, 10, 0, 0)];
    }    
    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
        [tableView setLayoutMargins:UIEdgeInsetsMake(0, 10, 0, 0)];
    }
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}
1
mike.tihonchik

Vous ne voudrez peut-être pas toujours créer une vue d'en-tête personnalisée, car il est parfois excessif ou il faudra des essais et des erreurs pour la rendre exactement comme le titre de la section par défaut. Au lieu de cela, il existe un simple hack qui n'aura pas besoin de renvoyer une vue d'en-tête personnalisée. Définissez simplement le retrait de votre séparateur sur 0 et placez un espace de début dans la chaîne de titre.

enter image description here

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return @"    Your Title";
}
0
rushafi