2

UIScrollView にボタンを動的に追加していますが、ボタンが 2 つしかないビューと 10 個のビューがあります。ボタンをスクロール ビューの中央に配置したいので、左から右に作成したようには見えません。私は SO からいくつかのトリックを試しましたが、何もうまくいかないようです。コンテンツ オフセットを設定するのが私の最初のアプローチでしたが、私が望む効果はありません。

私が使用しているコードは次のとおりです。

- (void)addButton:(UIButton *)button {
CGFloat contentWidth = 0.0f;
CGRect buttonFrame = button.frame;   
if ([_scrollView.subviews count] == 0) {

    buttonFrame.origin.x = self.contentIndicatorWidth + kButtonSeperator;
    contentWidth = self.contentIndicatorWidth + buttonFrame.size.width + self.contentIndicatorWidth;
} else {
    contentWidth = _scrollView.contentSize.width;
    UIButton *lastButton = [_scrollView.subviews lastObject];
    buttonFrame.origin.x = lastButton.frame.origin.x + lastButton.frame.size.width + kButtonSeperator;
    contentWidth += buttonFrame.size.width + kButtonSeperator;
}
button.frame = buttonFrame;
[_scrollView addSubview:button];
 _scrollView.contentSize = CGSizeMake(contentWidth *kContentMultiplicityFactor, _scrollView.frame.size.height);
 [_buttons setValue:button forKey:button.titleLabel.text];
totalWidth = contentWidth;

// [_scrollView scrollRectToVisible:[self getButtonAtIndex:0].frame animation:YES]; }

4

2 に答える 2

2

ボタンを追加したら、次のメソッドを呼び出します。


- (void)centerButtons:(NSArray*)buttons {
  CGSize scrollViewSize = _scrollView.bounds.size;

  // Measure the total width taken by the buttons
  CGFloat width = 0;
  for (UIButton* b in buttons)
    width += b.bounds.size.width + kButtonSeparator;
  if (width > kButtonSeparator)
    width -= kButtonSeparator;

  // If the buttons width is shorter than the visible bounds, adjust origin
  CGFloat origin = 0;
  if (width < scrollViewSize.width)
    origin = (scrollViewSize.width - width) / 2.f;

  // Place buttons
  CGFloat x = origin;
  CGFloat y = 0;
  for (UIButton* b in buttons) {
    b.center = CGPointMake(x + b.bounds.size.width/2.f, y + b.bounds.size.height/2.f);
    x += b.bounds.size.width + kButtonSeparator;
  }

  _scrollView.contentSize = CGSizeMake(MAX(scrollViewSize.width, width), scrollViewSize.height);
}
于 2012-12-13T23:37:40.560 に答える
0

結局のところ、これはそれほど難しい問題ではありません。これらのボタンをその場で追加すると思います。

ScrollView というスクロールビューがあり、コンテンツのサイズを既に入力しています。

したがって、幅の異なる 10 個のボタンがあります。

int btnCount = 10;
int totalWidth = 0;
int spacing = 5;
NSMUtableArray *buttons = [[NSMutableArray alloc] init];
for (int i=0; i<btnCount-1; i++) {
    UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [b setTitle:@"some title" forState:UIControlStateNormal];
    [b sizeToFit];
    CGRect frame = b.frame;
    totalWidth += b.frame.size.width;
    [buttons addObject:b];
}
totalWidth += (btnCount * spacing);
UIView *btnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, totalWidth, 40)];
int priorButtonX = 0;
for (UIButton *b in buttons) {
    CGRect frame = b.frame;
    frame.origin.x = priorButtonX;
    b.frame = frame;
    priorButtonX = frame.origin.x + spacing;
    [btnView addSubview:b];
}

int scrollSizeWidth = scrollView.contentSize.width;
int placeX = (scrollSizeWidth /2) - (btnView.frame.size.width /2)

CGRect btnViewFrame = btnView.frame;
btnViewFrame.origin.x = placeX;
bbtnView.frame = btnViewFrame;

[scrollView addSubView:btnView];

Y 配置で何かをしたいかもしれませんが、それは非常に簡単です。このコードはより少ない行で記述でき、使用する変数も少なくなりますが、これは読みやすくするために行われます。

于 2012-12-13T13:15:16.373 に答える