web-dev-qa-db-fra.com

Comment créer une largeur de ligne de 0,5 pixels

dans iOS 7, la ligne de séparation de la vue de table est plus mince que la précédente ios et ressemble à sa largeur de 0,5 px.

J'ai besoin de diviser une cellule en 2 avec une ligne de séparation similaire (uniquement verticalement) et je veux que cette ligne ait la même largeur que la ligne de séparation régulière.

Je me demande donc quelle est la meilleure façon d'ajouter une telle ligne?

Si j'utilise un UIView et que je règle sa largeur à 0,5, il ne sera pas visible, et si je règle sa largeur à 1,0, bien sûr, j'obtiendrai une largeur de ligne de 1,0 px et non 0,5 px.

J'ai essayé d'utiliser une ressource avec une taille de rétine de 1.0px mais cela n'a pas fonctionné aussi bien ...

34
Eyal

Vous définissez la largeur sur 0,5 - ou pour le rendre toujours 1 pixel, puis définissez-le sur (1.0 / [UIScreen mainScreen].scale)

Je l'ai déjà fait et ça a bien fonctionné

Je pense que la raison pour laquelle vous ne pouvez pas le voir est que vous centrez la ligne exactement au milieu de l'écran, ce qui rend l'origine de la ligne (320 - 0,5)/2,0, étant une origine X de 159,75 - la 0,75 peut être gâcher les choses - ou la cellule supprime la couleur d'arrière-plan de votre vue

24
SomeGuy

J'ai fait ces étapes:

  1. Créer une contrainte avec une hauteur de 1px
  2. Connectez la contrainte avec IBOutlet (fichier .m)
  3. Modifier la constante de la contrainte pour 0,5 dans ViewDidLoad

Ça marche pour moi.

24
anthonyqz

En supposant que vous faites vos dispositions de cellule avec les storyboards:

Placez un UIView avec votre hauteur souhaitée et 1px de largeur dans votre cellule. Donnez-lui la couleur de fond que vous aimerez. La couleur standard du séparateur est d'env. RVB (200,199,204).

Créez ensuite une sous-classe d'UIView, par ex. HairlineView et remplacer awakeFromNib()

-(void)awakeFromNib {
    self.layer.borderColor = [self.backgroundColor CGColor];
    self.layer.borderWidth = (1.0 / [UIScreen mainScreen].scale) / 2;

    self.backgroundColor = [UIColor clearColor];
}

Vous dessinez une bordure autour de votre vue large 1px, qui est large de 2 * 0,25px, ce qui en fait 0,5px au total, ce qui est la largeur que vous vouliez atteindre, puis masquez l'arrière-plan de la vue en définissant l'arrière-plan sur clair. Cette dernière étape est importante, elle ne fonctionnera pas sans.

Définissez le type de votre vue sur HairlineView, alors cela devrait fonctionner.

Lorsque vous le faites par programme, vous devez remplacer une méthode différente, par exemple initWithFrame() peut-être, puisque awakeFromNib () n'est appelé que lorsque vous créez la vue à partir d'une disposition de Storyboard.

14
Irina Anastasiu

Certaines des réponses ci-dessus sont déjà bonnes, mais juste une mise à jour: dans Xcode 8, vous pouvez maintenant définir une constante de contrainte de mise en page avec un nombre décimal . Plus besoin de connecter IBOutlet ou de définir une constante via les attributs d'exécution définis par l'utilisateur.

Decimal constant

11
kientux

Vous pouvez définir une constante de contrainte de disposition avec un nombre décimal, mais UIBuilder a un bug dans Xcode 8,9,10

Ma solution:

  1. Ouvrir le fichier xib par code source enter image description here]
  2. Trouvez votre constante de contrainte de mise en page et passez à 0,5 enter image description here
7
Andrey Dyatkov

vous pouvez définir une contrainte dans le storyboard height 0.5f; il ne sera pas visible directement mais il est visible sous la liste des contraintes comme indiqué dans la capture d'écran enter image description here

3
Rabiea

Vous pouvez utiliser Core Graphics pour dessiner le dégradé:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 1.0f)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];
2
user4128901

ma solution:

  1. créer une vue, définir une contrainte la vue: "height = 0px", allez dans "Identity Inspector" et éditez la priorité de cette contrainte à 750.

  2. puis sélectionnez la vue et cliquez sur le bouton "épingler", ajoutez une autre contrainte à cette vue: "hauteur = 0,5" avec une priorité de 1000. dans "Inspecteur d'identité" vous pouvez voir que la deuxième contrainte devient automatiquement "hauteur> = 0,5"

fonctionne dans Xcode 7.3.1

1
bubuStar

Vous mettez la vue dans votre cellule en bas. et définissez sa couleur sombre sur la vue. et également définir sa hauteur 0,5 PX. vous pouvez avoir un séparateur de chaque cellule dedans. garder sa largeur en fonction de la largeur de la cellule.

0
Kirit Modi

Façon délicate:

  1. Dans le storyboard ou xib, définissez une valeur unique (par exemple 123) pour la contrainte de hauteur de ligne
  2. Ouvrez le storyboard ou xib avec l'éditeur de texte
  3. Remplacez la valeur unique (par exemple 123) par 0,5
0
mishimay

J'utilise cette classe pour dessiner une ligne de 1 pixel (pas 1 point, mais un pixel).

class HairlineView: UIView {
    override func awakeFromNib() {
        super.awakeFromNib()

        for constraint in self.constraints {
            if let _ = constraint.firstItem as? HairlineView,
               constraint.firstAttribute == .height,
               constraint.firstAnchor.isKind(of: NSLayoutDimension.self),
               constraint.secondItem == nil,
               constraint.secondAnchor == nil {
                constraint.constant = (1.0 / UIScreen.main.scale)
                return
            }
        }
    }
}

La condition préalable est d'avoir UIView avec une contrainte de hauteur attachée. Le code examinera les contraintes existantes pour la vue, trouvera la contrainte de hauteur et définira sa valeur sur your_desired_height en pixels (ne pas confondre avec les points).

Le code peut facilement être changé en n'importe quelle valeur en remplaçant your_desired_height par la valeur dont vous avez besoin.

0

au lieu d'essayer de définir la hauteur de votre vue en fonction du style de séparateur. Retirez le séparateur. définissez le style du séparateur de cellules sur StyleNone.
Ajoutez ensuite deux vues avec une hauteur de 0,5 ou 1 pixel au milieu et en bas de la cellule. Elle a maintenant la même apparence et un style séparateur.

0
santhu