不要做我在下面尝试做的事情。请参阅此问题下方的更新“回答”。
我正在尝试在我的项目中实现自定义UINavigationBar,并使用Autolayout在其中放置图像和文本字段。
我已经将UINavigationBar子类化,添加了我的UIImageView图像和UITextField,并尝试使用AutoLayout进行布局,这适用于iOS 8,但它在iOS 7上不断崩溃。
以下是子类UINavigationBar的代码
#import "SHNavigationBar.h"
#import "UIColor+SHColor.h"
#import "UIView+AutoLayout.h"
#import "UITextField+SHTextField.h"
@interface SHNavigationBar()
@property (nonatomic, strong) UIImageView *titleImage;
@end
@implementation SHNavigationBar
@synthesize searchTextField;
@synthesize titleImage;
- (id)initWithFrame:(CGRect)frame {
if(self = [super initWithFrame:frame]) {
[self setBarStyle:UIBarStyleBlack];
[self setTranslucent:NO];
/**
* autoLayoutView below is a category that calls
* setTranslatesAutoresizingMaskIntoConstraints and sets it
* to NO for a view.
*/
self.titleImage = [UIImageView autoLayoutView];
[self.titleImage setImage:[UIImage imageNamed:@"Shelfd"]];
[self.titleImage setContentMode:UIViewContentModeScaleAspectFill];
[self addSubview:self.titleImage];
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleImage attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10.0f]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleImage attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];
}
return self;
}
/**
* This does not seem to work
*/
- (void)layoutSubviews {
[super layoutSubviews];
}
我使用以下代码将此子类UINavigationBar设置为导航控制器
self.featuredNavigationController = [[FeaturedNavigationController alloc] initWithNavigationBarClass:[SHNavigationBar class] toolbarClass:[UIToolbar class]];
[self.featuredNavigationController.tabBarItem setTitle:@"Featured"];
在iOS 7上,我收到的错误消息如下:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. SHNavigationBar's implementation of -layoutSubviews needs to call super.'
从这条消息中,我尝试在我的自定义UINavigationBar类中添加layoutSubviews函数,但它不起作用,我得到了与以前相同的错误消息。
有没有其他人遇到过这个问题,如果有,你是怎么解决的?
由于
答案 0 :(得分:0)
虽然严格来说这个答案不是解决方案,但我希望它能帮助遇到此问题的其他人。
从更多的讨论和研究到解决方案,我可以确认在UINavigationBar中使用Autolayout对子视图并不是一种好的做法,尝试这样做会导致你陷入困境,将来会出现更多问题。
我建议不要尝试这样做,因为iOS的后续版本可能会破坏您的代码。