0

画面の下部から常に X ピクセルになるようにボタンを配置しようとしています。ビューは、自動レイアウトを使用してプログラムでレイアウトされます。私が使用@"V:|-44-[closeModalButton]"した場合: オブジェクトは、期待どおりに画面の上から 44 ピクセルの位置に配置されます。ただし、@"V:[closeModalButton]-44-|"ボタンが表示されなくなります。かなり単純明快なはずのように思えるので、本当に明らかな何かが欠けているように感じます。

ビューの実装

#import "DetailView.h"

@implementation DetailView

@synthesize closeModalButton;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor = [UIColor whiteColor];
        CGRect aFrame = [[UIScreen mainScreen] bounds];
        self.frame = aFrame;

        closeModalButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [closeModalButton setImage: [UIImage imageNamed:@"closeButton.png"] forState:UIControlStateNormal];
        [closeModalButton setTranslatesAutoresizingMaskIntoConstraints:NO];
        [self addSubview:closeModalButton];

        NSDictionary *viewArranging = NSDictionaryOfVariableBindings(closeModalButton);

        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[closeModalButton(44)]-44-|"
                                                                     options:0
                                                                     metrics:0
                                                                       views:viewArranging]];

        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-149-[closeModalButton(44)]-149-|"
                                                                     options:0
                                                                     metrics:0
                                                                       views:viewArranging]];
    }
    return self;
}

@end

ビューコントローラー

#import "DetailViewController.h"

@interface DetailViewController ()

@end

@implementation DetailViewController
{
    DetailView *_detailView;
}

- (void)loadView
{    
    _detailView = [[DetailView alloc] init];
    [self setView:_detailView];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [_detailView.closeModalButton addTarget:self
                                     action:@selector(closeModalButtonPressed:)
                           forControlEvents:UIControlEventTouchUpInside];

}

- (void)closeModalButtonPressed:(UIButton *)sender{
    [self dismissViewControllerAnimated:YES
                             completion:nil];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
4

1 に答える 1

0

わかりましたので、DetailView.h は UIView ではなく UIScrollView をサブクラス化したようです。適切なサブクラスを設定すると、制約が期待どおりに動作するようになりました。

于 2014-04-22T15:58:34.530 に答える