0

내가 (특정 방법을 ALLOC 필요) 인터페이스 빌더에서 사용자 지정 버튼을 추가 할 수 있기 때문에 custom buttoncustom UICollectionViewCell크기 조정 UICollectionViewCell하고 자동 레이아웃

에 추가하려고 해요를 사용하여 내용이다, 나는 추가 명확한 배경을 가진 자리 표시 자 역할을하는 UIView (이 질문에서는 데모 용으로 검은 색).

이는 모습입니다 같은 :

enter image description here

그리고 다음 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; 
} 
} 

enter image description here

그러나 당신이 할 수 커스텀 버튼이 containerView의 전체 너비를 얻지 못하는 것을 볼 수 있습니다. 또한 정확하게 중심을 맞추지 않습니다.

그래서 나는이 개 질문이있어 : 자동 레이아웃을 사용하는 동안, 그것은 컨테이너에 UIView의 전체 폭을 사용하여 뷰에 사용자 정의 버튼을 추가 할 수있는 방법

1).

2) 카드의 왼쪽과 오른쪽에 공백을 추가 할 수있는 방법이 있습니까?

+0

첫 번째 질문에서 "자동 레이아웃을 사용하는 동안"이라고 말하지만 버튼과 해당 컨테이너 사이에는 자동 레이아웃을 사용하지 않습니다. 단추의 프레임을 설정하는 대신 구속 조건을 사용하여 컨테이너보기의 네면에 모두 고정하십시오. – rdelmar

+0

@rdelmar 답변 해 주셔서 감사합니다. 내가 어떻게 할 수 있니? – Galip

답변

1

다른 모든보기에서 제약 조건을 사용하고 있기 때문에 단추에 대해 동일한 작업을 수행하는 것이 좋습니다. 대신 정적 프레임을 사용하여, 당신은이 버튼의 프레임이 컨테이너 뷰의 하나와 일치해야한다 귀하의 버튼

- (void)awakeFromNib 
{ 

    self.btnAddOrRemove = [[HTPressableButton alloc] initWithFrame:self.btnContainerView.bounds buttonStyle:HTPressableButtonStyleRounded]; 
    [self.btnContainerView addSubView:self.btnAddOrRemove]; 
    [self.btnAddOrRemove setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.btnAddOrRemove addConstraintsToFillParentHorizontally:self.btnContainerView] 
    [self.btnAddOrRemove addConstraintsToFillParentVertically:self.btnContainerView] 
} 

- (void)addConstraintsToFillParentHorizontally:(UIView *)parentView 
{ 
    [parentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@{ @"view": self }]]; 
} 

- (void)addConstraintsToFillParentVertically:(UIView *)parentView 
{ 
    [parentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@{ @"view": self }]]; 
} 

에 프레임을 설정하는 시각적 레이아웃 제약을 사용하여 시도 할 수 있습니다. 그런 다음 layoutSubviews 메서드에서 둥근 모서리를 적용하면됩니다.

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    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 ] ]; 
} 

희망 사항! 그냥 투명

UIColor.clearcolor() 

하고 바닥 UIButton RECT 동일한 크기의 자리 표시 자보기를 넣어 중앙에 당신의 장소 홀더보기 배경 색상을 설정 한 후 내용을 설정하려는 경우 그대로

+0

답장을 보내 주셔서 감사합니다.하지만 인터페이스 빌더에서 사용자 정의 단추를 선언 할 수있게 해주는 다른 라이브러리를 구현하기로 선택 했으므로 더 이상 문제가되지 않습니다. 내 두 번째 질문은 여전히 ​​(사용자 정의 '카드의 너비를 줄이는 방법) 남아있다. – Galip

1

사실 당신은 버튼을 남길 수 있습니다 내부 버튼을 배경 이미지로 입력하는 모드!

contentMode = UIViewContentMode.Center