簡體   English   中英

Xib的UIControl在ios 7.1上崩潰

[英]UIControl from xib crashes on ios 7.1

我在情節提要中創建了一個自定義UIControl(MyControl)。 在ios 8和ios 9上,一切正常,我的應用程序沒有崩潰。 但是在ios 7(例如iphone 4)上,嘗試加載包含此控件的視圖控制器時,應用程序崩潰。 調試器突出顯示以下行:

typeof(self)loadedView = self.viewFromNib;

MyControl.h:

@interface MyControl : ControlFromXib

ControlFromXib.h:

@interface ControlFromXib : UIControl

- (void)commonInit;
@end

ControlFromXib.m:

- (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

檢查約束屬性,並與此處的列表進行比較。 以下屬性是在iOS 8中添加的,如果在xib或代碼中引用,則會在iOS 7(或更早版本)上崩潰。

  • NSLayoutAttributeLastBaseline
  • NSLayoutAttributeFirstBaseline
  • NSLayoutAttributeLeftMargin
  • NSLayoutAttributeRightMargin
  • NSLayoutAttributeTopMargin
  • NSLayoutAttributeBottomMargin
  • NSLayoutAttributeLeadingMargin
  • NSLayoutAttributeTrailingMargin
  • NSLayoutAttributeCenterXWithinMargins
  • NSLayoutAttributeCenterYWithinMargins

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM