iOS8 : Swift Resize UITextView or UIImageView

iOS8 : Swift Resize UITextView or UIImageView

Hello, Après un petit moment sans publier par manque de temps, voici deux petites astuces. Lorsque l'on récupère des flux JSON pour réaliser des applications, on a souvent une View contenant une image et du texte (Un article, un post Facebook / Twitter / Instagram, ...).

Cette UiView doit donc contenir l'image (UIImageView) du Post, et le text (UITextView) de ce dernier.

Après être passé sur de nombreuses applications de l'AppStore, la solution qui semble être la plus propre tout en demeurant simple, est d'utiliser une scrollView qui contiendra ces deux éléments. Jusque la rien de difficile, on simule une page web, une page contenant notre texte et notre image, sur laquelle l'utilisateur pourra scroller.

Voici deux petites solutions glanées sur internet qui répondront aux problèmes suivant que vous êtes susceptible de rencontrer :

  • Redimensionner votre UIImageView à la largeur de l'écran, de manière à ce qu'elle s'ajuste automatiquement suivant la version d'iPhone ou d'iPad sur laquelle l'application est lancée :

      // resize image
      let size = CGSizeMake(self.view.bounds.width, self.view.bounds.width)
      myImage.image! = imageResize(image: myImage.image!,sizeChange: size)
    
      func imageResize (#image:UIImage, sizeChange:CGSize)-> UIImage{
          let hasAlpha = true
          let scale: CGFloat = 0.0 // Use scale factor of main screen
          UIGraphicsBeginImageContextWithOptions(sizeChange, !hasAlpha, scale)
          image.drawInRect(CGRect(origin: CGPointZero, size: sizeChange))
          let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
          return scaledImage
      }
    
  • Interdire le scrolling sur votre UITextView puis de la redimensionner en fonction du texte qu'elle contient :

      myText.scrollEnabled = false
      var contentSize = myText.sizeThatFits(CGSizeMake(myText.frame.size.width, CGFloat.max))
      for c in myText.constraints() {
          if c.isKindOfClass(NSLayoutConstraint) {
              var constraint = c as! NSLayoutConstraint
              if constraint.firstAttribute == NSLayoutAttribute.Height {
                  constraint.constant = contentSize.height
                  break
              }
          }
      }
    

Enjoy ;)