clipsToBounds导致的UIImage不要在iOS10和XCode的8
我转我的项目到iOS的10和8的XCode新的测试版本在我的应用程序的所有三个领域,我使用display:clipsToBounds导致的UIImage不要在iOS10和XCode的8
imageView.layer.cornerRadius = imageView.frame.size.width/2
imageView.clipsToBounds = true
相关的图像根本不显示。我试图清理项目以及构建文件夹,重新启动设备,尝试各种模拟器,重新添加imageView,以编程方式设置关联的UIImage
而不是从资产中选择一个。
删除clipsToBounds
线显示矩形图像,不管masksToBounds
是true
还是false
。如何在XCode8/iOS10中制作圆形图像?
编辑:项目是Swift 2.x,但尚未更新为Swift 3.0语法。
我有同样的问题,并呼吁layoutIfNeeded
之前所有的圆角/ clipsToBounds
东西解决了问题。 iOS 10 GM with xcode 8 GM causes views to disappear due to roundedCorners & clipsToBounds
解决方案为我工作的ios 10.谢谢你&+1太.. – bittu
这可能是一个布局问题。将clipToBounds
设置为false将显示图像,即使其大小为零。你能打印你的图像的frame
?
如果您在viewDidLoad
中设置cornerRadius
和clipToBounds
属性,请尝试在viewDidLayoutSubviews()
中执行此操作。
您也可以尝试致电self.view.layoutIfNeeded()
。
你应该叫imageView.frame.size.width
[self.view layoutSubviews];
imageView.layer.cornerRadius = imageView.frame.size.width/2
imageView.clipsToBounds = true
您不应该手动调用'layoutSubviews'。致电'layoutIfNeeded'而不是 – Thorax
这个问题也发生在我身上之前调用layoutSubviews()主视图。
我将这些代码imageView.layer.cornerRadius = imageView.frame.size.width/2
从- (void)awakeFromNib
改为- (void)drawRect:(CGRect)rect
并且此问题消失。
我的imageView通过自动布局调整大小。我认为,当从iOS 10的笔尖醒来时,高度和宽度并不是决定的。
为我工作!谢谢 –
omg ..这样一个简单的灵魂.. +1 ..谢谢:) –
使用obj-c,将语法从viewDidLoad
移动到viewDidLayoutSubviews
为我工作。
我只是实现圆角的这样
@implementation RoundImageView
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
self.layer.masksToBounds = YES;
self.layer.cornerRadius = MIN(self.bounds.size.height, self.bounds.size.width)/2;
[self addObserver:self
forKeyPath:@"bounds"
options:NSKeyValueObservingOptionNew
context:(__bridge void * _Nullable)(self)];
}
return self;
}
-(void)dealloc
{
[self removeObserver:self
forKeyPath:@"bounds"
context:(__bridge void * _Nullable)(self)];
}
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context
{
if(context == (__bridge void * _Nullable)(self) && object == self && [keyPath isEqualToString:@"bounds"])
{
self.layer.cornerRadius = MIN(self.bounds.size.height, self.bounds.size.width)/2;
}
}
@end
,所以我总是有正确圆角。 我没有升级到iOS10和XCode8的问题
我认为问题的发生是因为我们设置圆角和剪辑子视图为@Pranoy C说。
我解决了使用layoutIfNeeded为我的tableview单元格显示用户的个人资料图片的问题。我想确保图像是圆角
代码如下: - (void)awakeFromNib {super awakeFromNib]; [self layoutIfNeeded];
[self.inputIndicator_imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.profile_pic_edit_imageView.layer.cornerRadius = self.profile_pic_edit_imageView.frame.size.width/2;
self.profile_pic_edit_imageView.layer.borderWidth = 1.0;
self.profile_pic_edit_imageView.layer.borderColor = GRAY_COLOR_SUPER_LIGHT.CGColor;
self.profile_pic_edit_imageView.clipsToBounds = YES;}
我有同样的问题。没有在手机上显示,但完美的故事板和UI调试器。当我把这个项目打开为“用Xcode 7打开”而不是8时,它也在工作,但它不是一个令人满意的解决方案。所以我挖掘并发现了这个问题。麻烦的是一类看起来像这样:
@IBDesignable public class MyButton: UIButton {
@IBInspectable var styleName: String = "" {
didSet {
switch styleName {
case "RoundedLight":
tintColor = UIColor.lightPinkColor()
layer.borderColor = UIColor.whiteColor().CGColor
layer.borderWidth = 1
layer.masksToBounds = true
default:
break
}
}
}
override public func layoutSubviews() {
super.layoutSubviews()
switch styleName {
case "RoundedLight":
layer.cornerRadius = frame.height/2
default:
break
}
}
}
我改成了这一点,它现在的作品:
@IBDesignable public class MyButton: UIButton {
@IBInspectable var styleName: String = "" {
didSet {
layoutIfNeeded()
}
}
override public func layoutSubviews() {
super.layoutSubviews()
switch styleName {
case "RoundedLight":
tintColor = UIColor.lightPinkColor()
layer.borderColor = UIColor.whiteColor().CGColor
layer.borderWidth = 1
layer.cornerRadius = frame.height/2
layer.masksToBounds = true
default:
break
}
}
}
注意,没有以上的工作对我来说,我的意思是:
- 在
layoutSubviews()
- 调用
layoutIfNeeded
在awakeFromNib
调用layoutIfNeeded
我的按钮(或包含按钮我的小区) - 在我的小区的
layoutSubview
- 在我的细胞
- 在我的视图控制器调用
view.layoutIfNeeded()
这声音的awakeFromNib
调用contentView.layoutIfNeeded()
调用layoutIfNeeded
就像它可能是由于iOS 10和Xcode 8的一个新bug导致视图初始化为1000x1000,并且尝试将角半径设置为帧的一半时,它将其设置为500。这里在这个问题上进一步记录:Since Xcode 8 and iOS10, views are not sized properly on viewDidLayoutSubviews。我之所以这样想,是因为在做任何需要在界面构建器上构建的东西的大小之前调用布局子视图的1000x1000问题的修复。
我的ImageView完全是圆形的。下面是代码:
//MARK:- Misc functions
func setProfileImage() {
imgProfile.layer.masksToBounds = false
imgProfile.layer.cornerRadius = imgProfile.frame.size.height/2
imgProfile.clipsToBounds = true
imgProfile.contentMode = UIViewContentMode.ScaleToFill
}
这工作正常的iOS 9然而,in iOS 10 Xcode 8 the ImageView disappears.
调试后发现,ClipsToBound是罪魁祸首。
所以放在viewDidLayoutSubviews()
的代码解决了这个问题。
override func viewDidLayoutSubviews() {
setProfileImage()
}
您还可以使用self.view.layoutIfNeeded()
所以它删除了clipsToBounds设置语句,并在cornerRadius停止影响再次成为直角的ImageView和你的形象? – ddb
@ddb是的,删除clipsToBounds语句后,图像是矩形的并且是可见的。 – cloudcal
这样的回答:http://*.com/questions/39380128/ios-10-gm-with-xcode-8-gm-causes-views-to-disappear-due-to-roundedcorners建议呼吁self.layoutIfNeeded –