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 是 UIScrollView 的子类,而不是 UIView。设置正确的子类会导致约束按预期运行。

于 2014-04-22T15:58:34.530 回答