大小一个从xib创建的UIView?
我从xib创建一个UIView,最终呈现为UIImage。大小一个从xib创建的UIView?
UIView本身具有内部约束,在给定IB中足够大的帧大小的情况下它可以正常工作。不过,我需要将宽度设置为某些特定的内容,并且我无法弄清楚如何在从xib加载UIView后设置宽度。
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil][0];
渲染视图,我这样做:
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
不管我怎么设定的界限来,但是,UIView的是尺寸为IB的初始大小相同。我如何设置UIView的大小,以便它会导致内部约束来调整大小并正确呈现?
尝试设置视图的所需的帧,然后调用它layoutIfNeeded:
UIView *view = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil][0];
CGRect finalFrame = CGRectMake(0, 0, 90, 90);
view.frame = finalFrame;
[view layoutIfNeeded];
UIGraphicsBeginImageContextWithOptions(finalFrame.size, NO, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我没有尝试layoutIfNeeded。我会尝试的。 – 2014-10-07 15:27:00
这绝对有效。 – 2014-10-07 17:42:16
如果您使用自动布局,你可能需要添加一个约束来指定新的宽度(和删除现有的宽度约束如果有的话)。如果使用布局约束,直接设置框架并不总是可行。 – Greg 2014-10-07 13:02:15
我尝试以编程方式设置宽度约束,并且也不成功。 – 2014-10-07 13:09:10
在更改帧到下一个运行循环后,有可能'UIView'延迟它的内部更新吗?之前我遇到过这个问题,并且将后续的渲染代码包装在主线程的'dispatch_async'中通常会修复它(但是之后,以编程方式设置宽度约束条件也总是对我有用,所以你可能会有其他的东西导致问题)。 – Greg 2014-10-07 13:14:39