2011-12-14 64 views
15

Tôi biết cách đặt căn chỉnh theo chiều dọc của một nút với IB; xem here. Nhưng tôi không thể làm điều đó theo chương trình ... Đây là một trong những điều tôi đã cố gắng:Làm cách nào tôi có thể lập trình căn chỉnh theo chiều dọc của UIButton - iOS

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 110, 130)]; 
[button setTitle:@"Align" forState:UIControlStateNormal]; 
button.backgroundColor = [UIColor whiteColor]; 
button.titleLabel.textColor = [UIColor grayColor]; 
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom]; 

[self.view addSubview:button]; 

[button release]; 

Tôi cũng đã cố gắng insets ...

nhưng sự liên kết sẽ không thay đổi.

Xin lưu ý rằng tôi muốn giữ CustomStyle của nút (Tôi không muốn giao diện mặc định).

Trả lời

1

Vấn đề được bằng cách sử dụng

button.titleLabel.textColor = [UIColor grayColor]; 

thay vì

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 

Ở những nơi khác trong mã của tôi, tôi vẫn đang gặp rắc rối theo chiều dọc sắp xếp văn bản, nhưng tôi đã có những Ví dụ cơ bản sẽ xảy ra, vì vậy tôi sẽ có thể nhận được phiên bản phức tạp hơn nếu tôi xem xét nó nhiều hơn. Có lẽ có những phương pháp khác mà tôi đang sử dụng như button.titleLabel.textColor mà làm cho sự liên kết dọc không hoạt động ...

Cập nhật Vấn đề ban đầu là thực sự vì nút của tôi là quá ngắn (nút chiều cao).

The word `husband' is in the button

Từ husband là trong nút, mà hiện đang theo chiều dọc thẳng hàng xuống đáy. Nhưng kể từ khi chiều cao của nút là không đủ, nó không phải là rõ ràng. Mặc dù giá trị mặc định của inset tiêu đề và nội dung insets là số không, nó không có vẻ như tiêu đề có thể được tuôn ra chống lại phía dưới. Có vẻ như khoảng 5 pixel với tôi. Tôi đã thử nghiệm với một phông chữ nhỏ hơn để đảm bảo điều này là chính xác.

Đáng tiếc là theo chiều dọc sắp xếp các văn bản để đầu dường như không thay đổi bất cứ điều gì ...

9

contentVerticalAlignment là cách để thực hiện. Có thể là cách bạn đang tạo nút. Hãy thử điều này:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
button.frame = CGRectMake(10, 10, 110, 130); 
// rest of your code 
// don't release button explicitly 
+0

+1 để trả lời câu hỏi của tôi 100%. Nhưng tôi sẽ không cho bạn đánh dấu bởi vì bạn không đọc được suy nghĩ của tôi ... Xin lỗi, tôi nên nêu rõ câu hỏi đó. Tôi cũng muốn giữ kiểu tùy chỉnh. Tôi sẽ sửa đổi câu hỏi của tôi để phản ánh điều đó. Tôi sẽ cho bạn đánh dấu nếu không có câu trả lời nào tốt hơn. Chúc mừng. –

+0

Điều thú vị là điều này sẽ ngừng hoạt động khi bạn (không chính xác) thay đổi màu phông chữ bằng cách truy cập titleLabel (thay vì gửi tin nhắn setTitleColor) –

+0

Điều này có thể không liên quan gì đến vấn đề nhưng bạn vẫn nên sử dụng 'buttonWithType' để tạo nút . Bất kỳ loại nào đều tốt, bao gồm 'buttonWithType: UIButtonTypeCustom'. – XJones

1

Bạn có thể dễ dàng thao tác nhãn văn bản bên trong của UIButton. đây làm thế nào bạn có thể làm điều đó:

  1. bộ text của nút để @ "" (chuỗi rỗng)
  2. tạo UILabel mới và điều chỉnh nó là khung
  3. chèn tạo UILabel bên xem nút như subview
  4. Đó là làm xong. Bây giờ bạn có thể lập trình thiết lập vị trí bên trong UILabel bằng cách thay đổi thuộc tính khung của nó.
18

Bạn có thể liên kết (ngang và dọc) các văn bản nút theo cách này:

 UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 70)]; 
     button.backgroundColor = [UIColor whiteColor]; 
     button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
     button.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom; 
     [button setTitle:@"Align" forState:UIControlStateNormal]; 
     [self.container addSubview:button]; 
+0

Tốt nhất, chúng tôi cũng có thể căn chỉnh hình ảnh của nút. –

0

Tôi tìm thấy một cách tốt hơn mà làm việc cho tôi. Tôi đang sử dụng một phông chữ tùy chỉnh để sự liên kết đã đi một chút đi bởi một vài như trong lindon fox's câu trả lời ở trên.

Bên trong bạn UIButton lớp con:

- (void)layoutSubviews { 

     [super layoutSubviews]; 

     if (UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, self.titleEdgeInsets)) { 

      // adjust top, left bottom, and right to fit your needs 
      self.titleEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right); 
     } 
} 

Tôi đồng ý với câu trả lời khác rằng việc sử dụng các thiết lập contentVerticalAlignment-UIControlContentVerticalAlignmentCenter cũng là một ý tưởng tốt.

Các vấn đề liên quan