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 ...
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
J'ai fait ces étapes:
Ça marche pour moi.
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.
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.
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:
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
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];
ma solution:
créer une vue, définir une contrainte la vue: "height = 0px", allez dans "Identity Inspector" et éditez la priorité de cette contrainte à 750.
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
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.
Façon délicate:
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.
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.