Set*_*pie 1 viewcontroller ios autolayout childviewcontroller flkautolayout
我已经使用autolayout几个星期了.目前,我正在使用名为FLKAutoLayout的第三方库,这使得该过程更容易.我正处于可以按照我想要的方式构建视图的地步,通常没有问题.然而,在过去4天的工作中,一旦参与了控制器,我就一直在努力进行自动布局.我对各种各样的UIViews很好......但出于某种原因,每个viewcontroller.view都是一个完全的恶魔.我只得到一个问题,让viewcontroller.view以我想要的方式调整大小,而更深层次的问题是,当使用autolayout时,子视图控制器的UIViews没有正确接收事件.子视图控制器在手动指定帧时工作得很好,但是一切都因autolayout而崩溃.
我不明白viewcontroller的UIView有什么不同之处让它与其他所有人不同......我的思绪正在沮丧地融化.ios是否在幕后或其他东西搞乱了我的viewcontroller视图?
示例图片http://i39.tinypic.com/6qeh3r.png
在图像中,红色区域属于子视图控制器.这个区域不应该超过最底部的子视图(表示三个的卡).这应该很简单,我可以通过一堆普通的UIViews使它工作得很好但是因为这是一个viewcontroller,一切都会破坏......
任何人都可以阐明我不知道的是什么.任何潜在问题的线索都非常感谢.
谢谢阅读.
更新:问题可能与模棱两可的约束有关
UIView *box = [[UIView alloc]init];
[box addSubview:imageView];
[box addSubview:nameLabel];
imageView constrainWidth:@"32" height:@"32"];
[imageView alignTop:@">=0" leading:@"0" bottom:@"<=0" trailing:@"<=0" toView:box];
[imageView alignCenterYWithView:box predicate:@"0"];
[nameLabel constrainLeadingSpaceToView:imageView predicate:@"5"];
[nameLabel alignTop:@">=0" leading:@">=0" bottom:@"<=0" trailing:@"<=0" toView:box];
[nameLabel alignCenterYWithView:box predicate:@"0"];
[self addSubview:box];
[box alignTop:@"5" leading:@"5" bottom:@"-5" trailing:@"-5" toView:self];
Run Code Online (Sandbox Code Playgroud)
上面的例子是一个模棱两可的布局,但我无法弄清楚它有什么问题......
这应该是一个评论,但评论很糟糕.;-)
你检查了不明确的约束吗?对我来说,这种观点看起来可能是由于模棱两可的约束造成的.
将此代码添加到您的应用代理:
// before @implementation AppDelegate
@interface UIWindow (AutoLayoutDebug)
+ (UIWindow *)keyWindow;
- (NSString *)_autolayoutTrace;
@end
// inside of @implementation
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSString *autolayoutTrace = [[UIWindow keyWindow] _autolayoutTrace];
if ([autolayoutTrace rangeOfString:@"AMBIGUOUS"].location != NSNotFound) {
NSLog(@"%@", autolayoutTrace);
}
else {
NSLog(@"No Ambiguous autolayout found");
}
}
Run Code Online (Sandbox Code Playgroud)
现在摇动你的模拟器.您将在硬件菜单中找到摇动手势.
如果它没有显示"No Ambiguous autolayout found",则检查打印的跟踪中的不明确的ui元素.它们标有"AMBIGUOUS".
然后开始添加约束,以便不再有歧义.
您可以调用exerciseAmbiguityInLayout具有不明确布局的UI元素来获取缺少哪些约束的提示.
并确保删除运输产品中的调试代码.你可以将这两个部分放在#if DEBUG和里面#endif
| 归档时间: |
|
| 查看次数: |
2750 次 |
| 最近记录: |