【发布时间】:2015-02-05 17:08:49
【问题描述】:
我正在尝试将 custom button 添加到 custom UICollectionViewCell
因为我无法在 Interface Builder 中添加自定义按钮(需要使用特定方法分配它),所以我添加了一个 UIView 作为它的占位符,它具有清晰的背景(黑色用于本问题的演示) .
看起来是这样的:
然后在 UICollectonViewCell 的自定义类中的代码中:
- (void)awakeFromNib {
// Initialization code
self.btnAddOrRemove = [[HTPressableButton alloc] initWithFrame:self.btnContainerView.bounds buttonStyle:HTPressableButtonStyleRounded];
self.btnAddOrRemove.center = CGPointMake(self.center.x, self.btnAddOrRemove.center.y);
//self.btnContainerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
- (void)layoutSubviews
{
[super layoutSubviews];
CGRect bounds = self.bounds;
if (self.shadowWidth != bounds.size.width)
{
if (self.shadowWidth == 0)
{
[self.layer setMasksToBounds:NO ];
[self.layer setShadowColor:[[UIColor blackColor ] CGColor ] ];
[self.layer setShadowOpacity:0.5 ];
[self.layer setShadowRadius:5.0 ];
[self.layer setShadowOffset:CGSizeMake( 0 , 0 ) ];
self.layer.cornerRadius = 5.0;
}
[self.layer setShadowPath:[[UIBezierPath bezierPathWithRect:bounds ] CGPath ] ];
if ([ChosenCategory getInstance].doesExist) {
if ([ChosenCategory getInstance].category == self.ingredientCategory) {
[self.btnAddOrRemove setTitle:NSLocalizedString(@"Edit profile", nil) forState:UIControlStateNormal];
[self.btnAddOrRemove setButtonColor:[UIColor ht_mediumColor]];
[self.btnAddOrRemove setShadowColor:[UIColor ht_mediumDarkColor]];
[self.btnAddOrRemove setTitleColor:[UIColor ht_ashColor] forState:UIControlStateNormal];
[self.btnAddOrRemove setTitleColor:[UIColor ht_ashColor] forState:UIControlStateHighlighted];
[self.btnAddOrRemove addTarget:self action:@selector(toDetail:) forControlEvents:UIControlEventTouchUpInside];
}
else {
[self.btnAddOrRemove setTitle:NSLocalizedString(@"Choose Profile", nil) forState:UIControlStateNormal];
[self.btnAddOrRemove setButtonColor:[UIColor ht_bitterSweetColor]];
[self.btnAddOrRemove setShadowColor:[UIColor ht_bitterSweetDarkColor]];
[self.btnAddOrRemove setTitleColor:[UIColor ht_ashColor] forState:UIControlStateNormal];
[self.btnAddOrRemove setTitleColor:[UIColor ht_ashColor] forState:UIControlStateHighlighted];
[self.btnAddOrRemove addTarget:self action:@selector(chosenProfile:) forControlEvents:UIControlEventTouchUpInside];
}
}
else {
[self.btnAddOrRemove setTitle:NSLocalizedString(@"Choose profile", nil) forState:UIControlStateNormal];
[self.btnAddOrRemove setButtonColor:[UIColor ht_mediumColor]];
[self.btnAddOrRemove setShadowColor:[UIColor ht_mediumDarkColor]];
[self.btnAddOrRemove setTitleColor:[UIColor ht_ashColor] forState:UIControlStateNormal];
[self.btnAddOrRemove setTitleColor:[UIColor ht_ashColor] forState:UIControlStateHighlighted];
[self.btnAddOrRemove addTarget:self action:@selector(chosenProfile:) forControlEvents:UIControlEventTouchUpInside];
}
[self.btnContainerView addSubview:self.btnAddOrRemove];
self.shadowWidth = bounds.size.width;
self.lblSummary.preferredMaxLayoutWidth = self.lblSummary.frame.size.width;
}
}
但正如您所见,自定义按钮没有获得 containerView 的全部宽度。它也没有正确居中。
所以我有两个问题:
1) 如何在使用 AutoLayout 时将自定义按钮添加到使用容器 UIView 的全宽的视图中。
2) 有没有办法在卡片的左右添加空格?
【问题讨论】:
-
您在第一个问题中说“使用自动布局时”,但您没有在按钮及其容器之间使用自动布局。不要设置按钮的框架,而是使用约束将其固定到容器视图的所有四个侧面。
-
@rdelmar 感谢您的回答。我怎么能这样做?
标签: ios objective-c autolayout uicollectionview uicollectionviewcell