2

私の問題に関連するいくつかの投稿があるようですが、どれも役に立たないようです。自動レイアウトが使用されている場合、CALayer のアンカー ポイントを調整するにはどうすればよいですか?

標準ビュー (およびビューコントローラー) が縮小され、別のビューに表示される、(チュートリアルとして) アプリの縮小プレビューがあります。

=============
=           =
= --------- =
= -       - =
= -Preview- =
= -       - =
= --------- =
=    View   =
=============

これには、次のコードを使用します。

previewViewController.view.transform = CGAffineTransformMakeScale(scale*2, scale*2);

チュートリアルのビュー コントローラーに合わせて、このスケーリングされたビューも必要です。このために、スケーリングされたビューのサイズを一致させる「プレースホルダー ビュー」を作成しました。

このために私は使用します:

-(void)setConstraintsForPreviewViewController
{
    NSArray *attributes = @[@(NSLayoutAttributeLeftMargin), @(NSLayoutAttributeRightMargin), @(NSLayoutAttributeTopMargin), @(NSLayoutAttributeBottomMargin)];
    [attributes enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL *stop) {
        NSLayoutAttribute attribute = [obj integerValue];
        [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.viewControllerPlaceholderView
                                                              attribute:attribute
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:previewViewController.view
                                                              attribute:attribute
                                                             multiplier:1
                                                               constant:0]];
    }];
}

これは iOS 7 ではうまくいきましたが、XCode 6 と iOS 8 でビルドするとうまくいかないようです。最初に制約を設定し(プレースホルダーに調整)、次に縮小します(結果としてプレビューが小さすぎます)。

コード:

-(void)setupPreviewViewController
{
    float scale = [self scale];
    previewViewController = [self.storyboard instantiateViewControllerWithIdentifier:[PLACEHOLDER_VIEWCONTROLLER_NAMES objectAtIndex:self.identifier]];

    previewViewController.view.transform = CGAffineTransformMakeScale(scale*2, scale*2);

    [self.view addSubview:previewViewController.view];
    previewViewController.view.translatesAutoresizingMaskIntoConstraints = NO;

    [self addChildViewController:previewViewController];

    [self setConstraintsForPreviewViewController];

    self.viewControllerPlaceholderToImageViewSpaceConstraint.constant = ([self hasNavigationBar] ? (44 * scale * 2) : -22 * scale * 2);

    self.viewControllerPlaceholderToBottomSpaceConstraint.constant = IS_WIDESCREEN ? 160 : 131;

    previewViewController.view.userInteractionEnabled = NO;

    [self.view setNeedsLayout];
}
4

1 に答える 1

2

私にはiOS 8のバグのようです。同じ問題がありました。私の解決策は、プレビューの自動レイアウトを無効にして、autoresizingMask に頼ることでした。

preview.translatesAutoresizingMaskIntoConstraints = YES;
preview.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
preview.frame = view.bounds;

しかし、私のプレビュー ビューはプレーンな UIImageView です。複雑な自動レイアウト ベースのプレビュー ビューでどのように機能するかはわかりません。

私はあなたのものとかなり似た設定をしています。私も上にプレースホルダー VC を使用していますが、autoresizingMask も使用して構築されているため、垂直方向に中央揃えする方が簡単なようです。

プレビュー ビュー内で何らかの制約を使用して問題が発生した場合は、プレビューをもう 1 つの UIView にラップして、それが機能するかどうかを確認します。[view (autoresizingMask, custom frame, scaled)] -> [view (autoresizingMask = Flexible W+H)] -> [Preview (Autolayout)]

于 2014-09-23T13:45:02.603 に答える