首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自xib的UIControl在IOS7.1上崩溃

来自xib的UIControl在IOS7.1上崩溃
EN

Stack Overflow用户
提问于 2015-10-09 12:15:03
回答 1查看 76关注 0票数 0

我在故事板中创建了一个自定义UIControl ( MyControl )。在ios 8和ios 9上,一切都很好,我的应用程序中也没有崩溃。但是在ios 7和iphone 4上,当试图加载包含此控件的视图控制器时,应用程序就会崩溃。调试器突出显示这一行:

类型(Self) loadedView = self.viewFromNib;

MyControl.h:

代码语言:javascript
复制
@interface MyControl : ControlFromXib

ControlFromXib.h:

代码语言:javascript
复制
@interface ControlFromXib : UIControl

- (void)commonInit;
@end

ControlFromXib.m:

代码语言:javascript
复制
- (instancetype)viewFromNib
{
    typeof(self) view = [[NSBundle mainBundle] loadNibNamed:self.nibName owner:nil options:nil].firstObject;
    return view;
}

- (NSString *)nibName
{
    return NSStringFromClass([self class]);
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self = self.viewFromNib;
        [self commonInit];
        self.frame = frame;
    }
    return self;
}

- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder
{
    if (self.subviews.count == 0) {
        typeof(self) loadedView = self.viewFromNib;

        loadedView.frame = self.frame;
        loadedView.autoresizingMask = self.autoresizingMask;
        loadedView.translatesAutoresizingMaskIntoConstraints = self.translatesAutoresizingMaskIntoConstraints;

        for (NSLayoutConstraint *constraint in self.constraints) {
            id firstItem = constraint.firstItem;
            if (firstItem == self) {
                firstItem = loadedView;
            }
            id secondItem = constraint.secondItem;
            if (secondItem == self) {
                secondItem = loadedView;
            }
            [loadedView addConstraint:
                    [NSLayoutConstraint constraintWithItem:firstItem
                                                 attribute:constraint.firstAttribute
                                                 relatedBy:constraint.relation
                                                    toItem:secondItem
                                                 attribute:constraint.secondAttribute
                                                multiplier:constraint.multiplier
                                                  constant:constraint.constant]];
        }

        self = loadedView;
    }

    [self commonInit];

    return self;
}

- (void)commonInit
{

}

@end
EN

回答 1

Stack Overflow用户

发布于 2015-10-10 17:26:15

检查约束属性并与列表这里进行比较。以下属性是在iOS 8中添加的,如果在xib或代码中引用,则会在iOS 7(以及更早的)上崩溃。

  • NSLayoutAttributeLastBaseline
  • NSLayoutAttributeFirstBaseline
  • NSLayoutAttributeLeftMargin
  • NSLayoutAttributeRightMargin
  • NSLayoutAttributeTopMargin
  • NSLayoutAttributeBottomMargin
  • NSLayoutAttributeLeadingMargin
  • NSLayoutAttributeTrailingMargin
  • NSLayoutAttributeCenterXWithinMargins
  • NSLayoutAttributeCenterYWithinMargins
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33038035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档