【问题标题】:How to set UIScrollView's background image as a stretchable image?如何将 UIScrollView 的背景图片设置为可拉伸图片?
【发布时间】:2023-05-20 09:53:02
【问题描述】:

我想将 UIScrollView 的背景图片设置为可拉伸的图片。我试过了:

UIImage* backgroundImage =[[UIImage imageNamed:@"background"]
                               resizableImageWithCapInsets:UIEdgeInsetsMake(100, 0, 0, 0) ];
self.scrollView.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];

但它没有拉伸。

我能做什么?

【问题讨论】:

    标签: ios objective-c uiscrollview stretch


    【解决方案1】:

    如果您想利用UIImage 的可调整大小的属性,您需要使用UIImageView。正如您所注意到的,如果您将其设置为背景颜色,则它不起作用。只需创建一个UIImageView 并将其放在您的UIScrollView 后面,如果它必须被修复,或者在您的UIScrollView 中,如果您希望它滚动,它的大小与contentSize 相同...

    【讨论】:

      【解决方案2】:

      UIImageView 中添加图片并在您的情况下设置

      yourImageView.contentMode = UIViewContentModeScaleAspectFill;
      

      您可以将其设置为以下任何一种

      UIViewContentModeScaleToFill,
      UIViewContentModeScaleAspectFit,
      UIViewContentModeScaleAspectFill,
      UIViewContentModeRedraw,
      UIViewContentModeCenter,
      UIViewContentModeTop,
      UIViewContentModeBottom,
      UIViewContentModeLeft,
      UIViewContentModeRight,
      UIViewContentModeTopLeft,
      UIViewContentModeTopRight,
      UIViewContentModeBottomLeft,
      UIViewContentModeBottomRight
      

      Ans 在你 scrolView 中添加这个 UIImageView

      另一种方法是您可以根据需要使用以下方法获取/创建图像大小。

      使用以下方法与特定 hightwidthimage

      + (UIImage*)resizeImage:(UIImage*)image withWidth:(int)width withHeight:(int)height
      {
          CGSize newSize = CGSizeMake(width, height);
          float widthRatio = newSize.width/image.size.width;
          float heightRatio = newSize.height/image.size.height;
      
          if(widthRatio > heightRatio)
          {
              newSize=CGSizeMake(image.size.width*heightRatio,image.size.height*heightRatio);
          }
          else
          {
              newSize=CGSizeMake(image.size.width*widthRatio,image.size.height*widthRatio);
          }
      
      
          UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
          [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
          UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
          UIGraphicsEndImageContext();
      
          return newImage;
      }
      

      此方法返回 NewImage,具有您指定的特定大小。

      【讨论】:

        【解决方案3】:

        试试这个

        UIImage* backgroundImage =[[UIImage imageNamed:@"back.jpg"]
                                   resizableImageWithCapInsets:UIEdgeInsetsMake(100, 0, 0, 0) ];
        UIGraphicsBeginImageContextWithOptions(self.scrollView.bounds.size, NO, 0.0);
        [backgroundImage drawInRect:self.scrollView.bounds];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        self.scrollView.backgroundColor = [UIColor colorWithPatternImage:newImage]; 
        

        【讨论】: