Tweetbot et Kickstarter pour iOS utilise une fonctionnalité Cool sur les profils d'utilisateur ayant une image de bannière. Si vous retirez sur le Je travaille partiellement en utilisant ce qui suit, il modifie la hauteur de l'image, mais étrangement, pas la largeur: p> < Pré> xxx pré> Est-ce que quelqu'un sait comment recréer cet effet? p> p> TableView code> L'image zooms.
6 Réponses :
Je pense que c'est simplement redimensionner la vue de l'image pour adapter l'espace vertical tout en conservant le même rapport d'aspect. P>
Je l'ai fait et j'ai ajouté le code ci-dessus. Cela fait un peu de travail, mais pour une raison quelconque, la largeur ne change jamais, même si le NSLog indique que le cadre est modifié. La hauteur est changée.
OK, je l'ai compris. Voici ce que j'ai fait:
@Nic Hubbard, j'essaie d'avoir un effet difficile d'obtenir cet effet dans un Uiscrollview. L'image ne colle pas au sommet. Pouvez-vous m'aider. ?
@ Priyatham51 - Cela fait plus d'un an depuis que je l'ai fait, donc je ne me souviens plus de l'ins et des aboutissants.
@Nichubbard, je l'ai réussi avec des contraintes de mise en page automatiques telles que décrivez ici ( blog.domesticcat.com.au/ios/2014/03/19/... ). Merci pour votre réponse. :)
Où est la définition @property? obtenu moins de moi.
Ce qui précède est correct, mais lorsque l'image est inférieure à celle de la taille réelle de la vue, l'image a tendance à aligner sur le coin droit. Peut être résolu en créant une vue uiimage des mêmes limites
@ Priyatham51 Si vous modifiez la dernière ligne à cette vue, la vue collera au sommet: Self.ImageView.center = cgPointMake (self.view.center.x, self.view.center.xer.y - y);
Version SWIFT 2 de la réponse de Nic Hubbard:
var imageView: UIImageView! var cachedImageViewSize: CGRect! override func viewDidLoad(){ super.viewDidLoad() self.imageView = UIImageView(image: UIImage(named: "church-welcome.png")) self.imageView.contentMode = .ScaleAspectFill self.cachedImageViewSize = self.imageView.frame self.tableView.addSubview(self.imageView) self.tableView.sendSubviewToBack(self.imageView) self.tableView.tableHeaderView = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, 170)) } func scrollViewDidScroll(scrollView: UIScrollView) { var y: CGFloat = -scrollView.contentOffset.y if y > 0 { self.imageView.frame = CGRectMake(0, scrollView.contentOffset.y, self.cachedImageViewSize.size.width + y, self.cachedImageViewSize.size.height + y) self.imageView.center = CGPointMake(self.view.center.x, self.imageView.center.y) } }
La réponse ci-dessus pour Swift:
Décélérations variables: strong> p> ScrollViefDidscroll: strong> p>
Version SWIFT 3.0 de la réponse de Nic Hubbard:
override func viewDidLoad() { self.imageView = UIImageView(image: UIImage(named: "header-image")) imageView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 170) self.imageView.contentMode = .scaleAspectFill self.cachedImageViewSize = self.imageView.frame self.tableView.addSubview(self.imageView) self.imageView.center = CGPoint(x: self.view.center.x, y:self.imageView.center.y) self.tableView.sendSubview(toBack: self.imageView) self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 170)) } override func scrollViewDidScroll(_ scrollView: UIScrollView) { let y: CGFloat = -scrollView.contentOffset.y if y > 0 { self.imageView.frame = CGRect(x: 0, y: scrollView.contentOffset.y, width: self.cachedImageViewSize.size.width + y, height: self.cachedImageViewSize.size.height + y) self.imageView.center = CGPoint(x: self.view.center.x, y: self.imageView.center.y) } }
Les solutions mentionnées ci-dessus ne fourniront pas vraiment la mise en œuvre exacte de la manière dont il se trouve dans Tweetbot ou Tinder [Picture de profil de la cible Zoom].
J'ai également dû résoudre ce problème et la mise en œuvre la plus parfaite que j'ai trouvée est d'utiliser 2 éléments principaux: p>
1) TableView qui a contesté INSET P>
2) IMAGEVoir la vue de cette table qui a une sortie pour la contrainte supérieure et la contrainte de hauteur et qui est au-dessus de Cet espace vide fourni par le contenu de la TableView Inset. p>
alors assurez-vous d'abord de définir les embarqués pour la validation de la View et de la hauteur initiale pour l'imageView. Vous pouvez le faire dans ViefDiDload par exemple. P>
imageView.contentMode = .scaleAspectFill layer.masksToBounds = true