0

iOS 7 のカスタム レイアウトに問題があります。ナビゲーション バーの下など、すべてが高すぎます。iOS 6 では、iOS 7 SDK でコンパイルした場合でも魅力的に動作します。

以下に、ビューの初期化とレイアウトに使用するコードを投稿します。私は Interface Builder を使用していません。どんな助けでも感謝します。

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.documentTitle = [UITextField new];
        self.documentExtension = [UILabel new];

        self.documentTitle.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Document title"];
        self.documentTitle.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize] + 1];
        self.documentTitle.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        self.documentTitle.borderStyle = UITextBorderStyleRoundedRect;
        self.documentTitle.returnKeyType = UIReturnKeyDone;
        self.documentTitle.keyboardType = UIKeyboardTypeDefault;

        self.documentExtension.text = @".pdf";
        self.documentExtension.backgroundColor = [UIColor clearColor];

        [self addSubview:self.documentTitle];
        [self addSubview:self.documentExtension];
    }

    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];

    UIEdgeInsets padding = UIEdgeInsetsMake(12, 10, 12, 10);
    CGRect layoutRect = UIEdgeInsetsInsetRect(self.bounds, padding);
    CGPoint p = layoutRect.origin;

    CGSize tmpSize;
    CGFloat tfSpaceHorizontal = 6;
    CGFloat tfSpaceVertical = 6;

    CGSize tmpSizeDocumentExtension = [self.documentExtension sizeThatFits:CGSizeMake(CGRectGetWidth(layoutRect), 1000)];

    tmpSize = CGSizeMake(
            roundf((CGRectGetWidth(layoutRect) - tfSpaceHorizontal - tmpSizeDocumentExtension.width)),
            32
    );

    self.documentTitle.frame = CGRectMake(
            p.x, p.y,
            tmpSize.width,
            tmpSize.height
    );

    p.x += tmpSize.width + tfSpaceHorizontal;
    CGFloat addedHeight = roundf(tmpSize.height/2 - tmpSizeDocumentExtension.height/2);
    addedHeight = addedHeight > 0 ? addedHeight : 0;
    p.y += addedHeight;

    self.documentExtension.frame = CGRectMake(
            p.x,
            p.y,
            tmpSizeDocumentExtension.width,
            tmpSizeDocumentExtension.height
    );
}
4

1 に答える 1

0

iOS 7 では、すべてのビュー コントローラーがフルスクリーン レイアウトを使用するため、座標系はステータス バーの下から開始されるため、ビューを配置する際に注意してください。

これは、Apple のiOS 7 UI Transitioning Guideに記載されています。

于 2013-09-20T13:25:29.153 に答える