2009-08-02 4 views
12

사용자 정의 이미지를 사용하여 5 개의 버튼이있는 UIToolbar을 만들려고합니다. 이 작업을 수행하는 방법은 UIButtonTypeCustom 유형의 단추를 만든 다음 이들 중에서 UIBarButtonItems을 만든 다음 setItems:animated:과 함께 도구 모음에 추가합니다. 그러나 이로 인해 이미지 사이에 공백이 추가되어 다섯 번째 이미지가 툴바의 오른쪽에서 반으로 끝나게됩니다. 이 공간을 어떻게 없앨 수 있습니까? 나는 내가 생각할 수있는 모든 것을 시도했다.사용자 정의보기간에 UIToolbar의 공백을 제거하려면 어떻게합니까?

도움을 주시면 대단히 감사하겠습니다. ..

UIButton *button; 
UIBarButtonItem *barButton1,*barButton2; 

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal]; 
button.bounds = CGRectMake(0,0,button.imageView.image.size.width, button.imageView.image.size.height); 
[button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside]; 
barButton1 = [[UIBarButtonItem alloc] initWithCustomView:button]; 


button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setImage:[UIImage imageNamed:@"bart_tb.png"] forState:UIControlStateNormal]; 
button.bounds = CGRectMake(0,0,button.imageView.image.size.width, button.imageView.image.size.height); 
[button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside]; 
barButton2 = [[UIBarButtonItem alloc] initWithCustomView:button]; 

NSArray *items = [NSArray arrayWithObjects: barButton1, barButton2, nil]; 
[self.toolbar setItems:items animated:NO]; 
+0

해결 했습니까? – mk12

+0

나는 도구 모음으로 작업 할 수 없었습니다. 나는 신비한 공간을 없애는 방법을 알아낼 수 없었다. 나는 대신 UITabBar를 사용하여 전환 끝나고 지금까지 내 요구를 충족 시켰습니다. –

답변

0
UIBarButtonItem *barButton1,*barButton2; 

barButton1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image1.png"] style:UIBarButtonItemStylePlain 
    target:self action:@selector(action:)]; 

barButton2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bart_tb.png"] style:UIBarButtonItemStylePlain 
    target:self action:@selector(action:)]; 

NSArray *items = [[NSArray alloc] initWithObjects: barButton1, barButton2, nil]; 
[barButton1 release]; 
[barButton2 release]; 
[self.toolbar setItems:items animated:NO]; 
[items release]; 

이 그런 식으로 작업을 수행하고 버튼의 폭을 변경하려는 경우, 폭 속성을 설정 : 여기

은 내가 이것에 대해 갈거야 방법에 대한 몇 가지 예제 코드입니다 UIBarButtonItem 개체 중 하나입니다. 너비의 기본값은 0이며 이미지/제목에 정확히 일치하도록 만듭니다.

희망이 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 불행히도 이것은 나를 위해 작동하지 않았다. UIBarButtonItem 너비 속성을 변경해도 이미지가 흰색 상자로 나타나고 (위의 방법으로 올바르게 표시되지만) 틈이 여전히 있습니다. 나는 물건을 망쳐 놓을 수있는 툴바로 다른 것을하지 않고 있는지 확인하기 위해 다시 점검했다. –

+0

조금 나중에 편집했는데 [UIImage imageNamed : @ "]를 사용하고 있는지 확인하십시오. 여전히 문제가 발생하더라도이 작업을 수행하는 방법은 UIButton이 아니라 사용자에게 보여준 것과 같습니다. 두 개의 barbuttonitem이 있다면 툴바의 어느 한쪽 끝으로 이동한다고 생각합니다. 자동으로 공간을 넓히는 것 같습니다. IB 파일을 사용하여 인터페이스를 모두 배치 한 다음 코드를 작성해보십시오. nib에서와 같이 모든 속성을 설정하십시오. – mk12

+0

그래, [UIImage imageNamed ...]를 사용하고 있는데,이 방법은 이미지의 알파 만 사용하고 컬러 이미지를 사용하고 싶습니다. 5 개 항목을 추가해도 도구 모음의 오른쪽에서 부분적으로 끝나는 다섯 번째 항목이 생겨도 여전히 간격이 생기는 것입니다.이 틈을 완전히 없애는 방법이 있습니까? –

5

각 항목 사이에 스페이서를 추가하면 간격이 자동으로 작동합니다. 귀하의 경우에는 두 개의 버튼 중 한쪽과 양쪽 사이에 스페이서를 두는 것이 좋습니다. 당신과 같이이 작업을 수행 할 수 있습니다 당신은 또한 UIBarButtonSystemItemFixedSpace을 사용할 수 있지만 명시 적으로 그것의 '폭'속성을 지정해야합니다

UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

NSArray *items = [[NSArray alloc] initWithObjects: spacer, barButton1, spacer, barButton2, spacer, nil]; 

[spacer release]; 

참고. 반면에 UIBarButtonSystemItemFlexibleSpace가이 작업을 수행하는 것처럼 보입니다.

+0

이것은 완벽하게 작동했습니다. – galactikuh

2

이 문제를 해결 했으므로 각 단추 앞뒤의 유연한 항목을 사용해야합니다.

UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

툴바에 설정할 항목의 배열에 flexibleSpace를 추가하기 만하면됩니다.

p.s. 나는 이것을 없애기 전에 거의 죽여 버렸고 UIToolBar 대신 다른 막대를 사용하는 것을 포함한 모든 유형의 솔루션을 시도했습니다.

+0

왼쪽과 오른쪽 간격이 아니라 단추 간 간격 만 사용합니다. –

2

글쎄, 이건 정말 오래된 질문이지만, 난 그냥 똑같은 문제를 만났고 해결할 수있었습니다.

마법 암호는 UIBarButtonItem 스타일을 UIBarButtonItemStyleBordered로 설정합니다.

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:aView]; 
item.style = UIBarButtonItemStyleBordered; 

한게을 ...

+0

참고로 UIBarButtonItem에 대한 customview를 설정하면 대상과 액션에 대한 호출을 잃게됩니다. 이 경우 타겟과 액션을 추가하기 위해'UIButton'을 커스텀 뷰로 사용하고 타겟과 액션을 추가하거나'UIImageView'를 사용한다면'UITapGestureRecognizer'를 추가하십시오. – Hemang

2

간격을 보상하기 위해 항목 간의 음 폭 고정 된 공간에 항목을 추가 할 수있다.

UIBarButtonItem *fixedSpace = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease]; 
fixedSpace.width = -12.0f; 
1

나는이 문제를 만났다. 마지막으로 UIToolbar를 서브 클래 싱하여 레이아웃 서브 뷰 메소드를 오버라이드하여이 문제를 해결했습니다. 당신이 찾고있는 경우

- (void)layoutSubviews { 

    [super layoutSubviews]; 

    if (leftItem_ && leftItem_.customView 
     && [leftItem_.customView isKindOfClass:[UIButton class]]) { 
    CGRect newFrame = leftItem_.customView.frame; 
    newFrame.origin.x = 0; // reset the original point x to 0; default is 12, wired number 
    leftItem_.customView.frame = newFrame;  
    } 

    if (rightItem_ && rightItem_.customView 
     && [rightItem_.customView isKindOfClass:[UIButton class]]) { 
    CGRect newFrame = rightItem_.customView.frame; 
    newFrame.origin.x = self.frame.size.width - CGRectGetWidth(newFrame); 
    rightItem_.customView.frame = newFrame; 
    } 

} 
17

는 당신이 UIToolBar 구매에 대해 수행 automaticall의 기본보다 작거나 (나 같은)도 0 세로 간격으로 배치 UIBarButtonItems이다; 다음은 내가 추천하는 것입니다 :

UIToolBar 레이아웃 개인적으로 항목입니다. Apple 엔지니어는 개발자가 실제로이를 덮어 쓸 것으로 기대하지 않습니다. 고정 된 공백을 사용하여 기본 10Point 수평 간격을 덮어 쓰는 것만으로는 충분하지 않습니다. UIToolbar 적어도 10 포인트 떨어져 해당 항목을 레이아웃 때문에 다음 코드와 같이 , 당신은 더 간격을 얻을하기 위해 -10 이러한 UIBarButtonItems의 폭을 설정 I에 의해 Xcode4에서이 문제를 해결 할 수 있었다

CGFloat toolbarHeight = 44.0; 
CGRect toolbarFrame = CGRectMake(0,0, self.view.bounds.size.width, toolbarHeight); 
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:toolbarFrame]; 

UIBarButtonItem* noSpace = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease]; 
UIBarButtonItem* noSpace1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease]; 

noSpace.width = -10.0; 
noSpace1.width = -10.0; 

[toolbar setItems:[NSArray arrayWithObjects: 
        [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil] autorelease], 
        noSpace, 
        [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil] autorelease], 
        noSpace1, 
        [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil] autorelease] 
        , nil]]; 
+1

애플이 더 우아한 방법으로 이것을 할 수있는 방법을 제공하지 않는다는 것을 좌절시킨다. – jjxtra

1

가장 왼쪽의 항목으로 유연한 공간을 넣은 다음 가장 오른쪽의 항목으로 다른 공간을 배치합니다. 두 개의 모음 단추 사이에서
enter image description here

+0

이 질문은 여전히 ​​관련이있다. 그리고 이것은 현재로서는 답이다 (3 년 후)! – Troy

2

enter image description here

당신은 UIBarButtonSystemItemFixedSpace 수 있습니다. 너비를 조정해라. 나에게 도움이되었다.

0

오늘 같은 문제에 직면하고 쉬운 방법으로 해결했습니다. 공유합니다.

동일한 번호를 가진 새로운 UIView를 사용할 수 있습니다. 표시하려는 툴바의 버튼을 클릭합니다. 그리고 도구 모음에 따라 크기를 설정하면됩니다.

간단히 말해 도구 모음 위의 일반 단추는 도구 모음 단추처럼 보입니다.

관련 문제