resizableImageWithCapInsets:问题

时间:2016-09-16 05:51:35

标签: ios objective-c uiimageview autolayout ios-autolayout

我试图找出如何使用UIImageViewresizableImageWithCapInsets:中将下拉图片放入黑色边框(仅用于居住的边框)。

我使用AutoLayout,_imageView具有固定的高度约束

        UIImage *dropdown = [[UIImage imageNamed:@"dropdown.png"]
                         resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 100)];
        _imageView.contentMode = UIViewContentModeScaleAspectFit; // modes see below
        _imageView.clipsToBounds = NO;
        _imageView.layer.borderWidth = 1;
        _imageView.image = dropdown;

UIViewContentModeTopLeft

top left

UIViewContentModeScaleToFill

scale to fill

UIViewContentModeScaleAspectFit

aspect fit

UIViewContentModeScaleAspectFill

aspect fill

修改

我尝试按照@Rahul的建议设置顶部和底部插图,如果设置UIViewContentModeScaleToFill我会得到什么(在其他模式下类似的结果)。正如您可能注意到的那样,白色向下箭头现在略微向下移动

UIImage *dropdown = [[UIImage imageNamed:@"dropdown.png"]
                         resizableImageWithCapInsets:UIEdgeInsetsMake(8, 20, 8, 100)];

other pic

修改2

更改偏移似乎对此没有帮助,问题似乎是在垂直缩放中,好像图像视图由于某种原因仅加入一个垂直偏移,而不是两者,因此我们得到非对称垂直偏移

编辑3

GitHub上的示例项目:ScaleTest-iOS

编辑4

使用自定义调整大小方法更新了GitHub示例(无可用),在Apple Dev Forum上创建topic

编辑5

接受的答案我认为这是一种解决方法,我宁愿保持固定的高度,但似乎不可能。无论如何,感谢@Rahul的帮助。

3 个答案:

答案 0 :(得分:2)

请参阅本教程:How To Make A Stretchable Button With UIEdgeInsetsMake private func prepareContainerView() { containerView = UIView() view.layout(containerView).edges(top: 100, left: 20, right: 20) //The above line is showing error } &为您的图像应用合适的边缘插图....

UIEdgeInsetsMake(8, 8, 8, 8)

设置 imageview4 高度35而不是40像素&然后工作得很完美......

enter image description here

答案 1 :(得分:0)

_imageView.contentMode = UIViewContentModeScaleAspectFit; 
_imageView.layer.cornerRadius = 20; // Apply your required value.
_imageView.layer.masksToBounds = YES;

答案 2 :(得分:0)

试试这个UIEdgeInsetsMake(8,100,8,8);如果图像边界曲线的半径为20px

,则使用20px