Có thể thay đổi chiều cao của UIPickerView không? Một số ứng dụng dường như có PickerView ngắn hơn nhưng việc đặt khung nhỏ hơn dường như không hoạt động và khung bị khóa trong Trình tạo giao diện.
Có thể thay đổi chiều cao của UIPickerView không? Một số ứng dụng dường như có PickerView ngắn hơn nhưng việc đặt khung nhỏ hơn dường như không hoạt động và khung bị khóa trong Trình tạo giao diện.
Câu trả lời:
Có vẻ như Apple không đặc biệt mời tạo mucking với chiều cao mặc định của UIPickerView
, nhưng tôi nhận thấy rằng bạn có thể đạt được sự thay đổi về chiều cao của chế độ xem bằng cách kiểm soát hoàn toàn và chuyển kích thước khung hình mong muốn tại thời điểm tạo, ví dụ:
smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Bạn sẽ phát hiện ra rằng ở các chiều cao và chiều rộng khác nhau, có những trục trặc về hình ảnh. Rõ ràng, những trục trặc này sẽ cần được khắc phục bằng cách nào đó, hoặc chọn một kích thước khác không thể hiện chúng.
Không có phương pháp nào ở trên hoạt động trong iOS 4.0
Chiều cao của PickerView không còn có thể thay đổi kích thước được nữa. Có một thông báo được đưa vào bảng điều khiển nếu bạn cố gắng thay đổi khung của bộ chọn trong 4.0:
-[UIPickerView setFrame:]: invalid height value 66.0 pinned to 162.0
Cuối cùng tôi đã làm một việc khá triệt để để có được hiệu ứng của một bộ chọn nhỏ hơn hoạt động trong cả OS 3.xx và OS 4.0. Tôi để bộ chọn ở bất kỳ kích thước nào mà SDK quyết định nó sẽ như vậy và thay vào đó, tạo một cửa sổ trong suốt cắt ngang trên hình nền của tôi mà qua đó bộ chọn sẽ hiển thị. Sau đó, chỉ cần đặt bộ chọn phía sau (Thứ tự Z khôn ngoan) UIImageView nền của tôi để chỉ một phần của bộ chọn được hiển thị được quy định bởi cửa sổ trong suốt trong nền của tôi.
Chỉ có ba chiều cao hợp lệ cho UIPickerView (162.0, 180.0 and 216.0)
.
Bạn có thể sử dụng các chức năng CGAffineTransformMakeTranslation
và CGAffineTransformMakeScale
chức năng để phù hợp với bộ chọn sao cho thuận tiện.
Thí dụ:
CGAffineTransform t0 = CGAffineTransformMakeTranslation (0, pickerview.bounds.size.height/2);
CGAffineTransform s0 = CGAffineTransformMakeScale (1.0, 0.5);
CGAffineTransform t1 = CGAffineTransformMakeTranslation (0, -pickerview.bounds.size.height/2);
pickerview.transform = CGAffineTransformConcat (t0, CGAffineTransformConcat(s0, t1));
Đoạn mã trên thay đổi chiều cao của chế độ xem bộ chọn thành một nửa và định vị lại nó về vị trí chính xác (Left-x1, Top-y1) .
Thử:
pickerview.transform = CGAffineTransformMakeScale(.5, 0.5);
Trong iOS 4.2 & 4.3, các hoạt động sau:
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.frame = CGRectMake(0, 0, 320, 180);
[self addSubview:datePicker];
Cách sau không hoạt động:
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
[self addSubview:datePicker];
Tôi có một ứng dụng trong cửa hàng ứng dụng với bộ chọn ngày 3 dòng. Tôi nghĩ rằng thay đổi độ cao có thể đã bị ngăn chặn vì bạn nhìn thấy văn bản dưới đường viền của bộ chọn ngày, nhưng điều này cũng xảy ra với bộ chọn ngày 216 độ cao bình thường.
Đó là lỗi nào? Dự đoán của bạn cũng tốt như của tôi.
Ngoài ra, có 3 chiều cao hợp lệ cho UIDatePicker
(và UIPickerView
) 162.0, 180.0 và 216.0. Nếu bạn đặt UIPickerView
chiều cao thành bất kỳ thứ gì khác, bạn sẽ thấy thông tin sau trong bảng điều khiển khi gỡ lỗi trên thiết bị iOS.
2011-09-14 10:06:56.180 DebugHarness[1717:707] -[UIPickerView setFrame:]: invalid height value 300.0 pinned to 216.0
Tôi nhận thấy rằng bạn có thể chỉnh sửa kích thước của UIPickerView - không chỉ với trình tạo giao diện. mở tệp .xib bằng trình soạn thảo văn bản và đặt kích thước của chế độ xem bộ chọn thành bất kỳ thứ gì bạn muốn. Trình tạo giao diện không đặt lại kích thước và nó có vẻ hoạt động. Tôi chắc rằng apple đã khóa kích thước là có lý do, vì vậy bạn sẽ phải thử nghiệm với các kích thước khác nhau để xem loại nào hoạt động.
UIPickerView
hoạt động như nó nênUIViewController
viewWillLayoutSubviews
để bán lại / định vịUIPickerView
UIPopover
UIPickerView
pickerView viewForRow
để hoàn tác chuyển đổi cho các Chế độ xem phụSubclass UIPickerView và ghi đè hai phương thức bằng đoạn mã sau. Nó kết hợp phân lớp con, chiều cao cố định và phương pháp chuyển đổi.
#define FIXED_PICKER_HEIGHT 216.0f
- (void) setFrame:(CGRect)frame
{
CGFloat targetHeight = frame.size.height;
CGFloat scaleFactor = targetHeight / FIXED_PICKER_HEIGHT;
frame.size.height = FIXED_PICKER_HEIGHT;//fake normal conditions for super
self.transform = CGAffineTransformIdentity;//fake normal conditions for super
[super setFrame:frame];
frame.size.height = targetHeight;
CGFloat dX=self.bounds.size.width/2, dY=self.bounds.size.height/2;
self.transform = CGAffineTransformTranslate(CGAffineTransformScale(CGAffineTransformMakeTranslation(-dX, -dY), 1, scaleFactor), dX, dY);
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
//Your code goes here
CGFloat inverseScaleFactor = FIXED_PICKER_HEIGHT/self.frame.size.height;
CGAffineTransform scale = CGAffineTransformMakeScale(1, inverseScaleFactor);
view.transform = scale;
return view;
}
Một cách dễ dàng để thay đổi chiều cao có thể nhìn thấy của chế độ xem bộ chọn là nhúng bộ chọn vào UIView, điều chỉnh chiều cao của chế độ xem gốc thành độ cao bạn muốn xem của bộ chọn, sau đó bật "Clip Subviews" trong Trình tạo giao diện trên UIView chính hoặc đặt view.clipsToBounds = true
trong mã.
Clip Subviews
. cũng là kích thước của UIPickerView
phải cao hơn - và bạn phải đặt mục tiêu trung tâm của bạn UIPickerView
được hiển thị bên trong phụ huynhUIView
UIPickerView
từ mã).
Tôi đã không thể làm theo bất kỳ lời khuyên nào ở trên.
Tôi đã xem nhiều hướng dẫn và thấy bài này có lợi nhất:
Tôi đã thêm mã sau để đặt chiều cao mới bên trong phương thức "viewDidLoad", phương thức này hoạt động trong ứng dụng của tôi.
UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
[self.view addSubview:picker];
picker.delegate = self;
picker.dataSource = self;
Hy vọng điều này là hữu ích!
Điều này đã thay đổi rất nhiều trong iOS 9 (trong iOS 8, nó khá giống với những gì chúng ta đang thấy ở đây). Nếu bạn có đủ khả năng chỉ nhắm mục tiêu iOS 9, thì bạn thay đổi kích thướcUIPickerView
khi bạn thấy phù hợp, bằng cách thiết lập khung của nó. Tốt!
Đây là từ Ghi chú phát hành iOS 9
UIPickerView và UIDatePicker hiện có thể thay đổi kích thước và thích ứng — trước đây, các chế độ xem này sẽ thực thi kích thước mặc định ngay cả khi bạn đã cố gắng thay đổi kích thước chúng. Các chế độ xem này giờ đây cũng được mặc định là chiều rộng 320 điểm trên tất cả các thiết bị, thay vì chiều rộng thiết bị trên iPhone.
Các giao diện dựa trên việc thực thi cũ về kích thước mặc định có thể sẽ trông sai khi được biên dịch cho iOS 9. Mọi vấn đề gặp phải đều có thể được giải quyết bằng cách hạn chế hoàn toàn hoặc sắp xếp các chế độ xem bộ chọn theo kích thước mong muốn thay vì dựa vào hành vi ngầm định.
Tôi đang làm việc với ios 7, Xcode 5. Tôi đã có thể điều chỉnh độ cao của bộ chọn ngày gián tiếp bằng cách đặt nó trong một khung nhìn. Có thể điều chỉnh chiều cao khung nhìn vùng chứa.
Tạo chế độ xem trong IB hoặc mã. Thêm bộ chọn của bạn làm chế độ xem phụ của chế độ xem này. Thay đổi kích thước chế độ xem. Điều này dễ thực hiện nhất trong IB. Tạo ràng buộc từ chế độ xem đến chế độ xem siêu cao của nó và từ bộ chọn đến chế độ xem mới này.
Vì Bộ chọn uốn cong xung quanh nó tràn ra trên cùng và dưới cùng của chế độ xem. Bạn có thể thấy trong IB khi bạn thêm các ràng buộc trên và dưới từ bộ chọn vào chế độ xem, nó sẽ hiển thị một không gian tiêu chuẩn giống như 16 điểm ở trên và dưới vùng chứa superview. Đặt chế độ xem thành clip nếu bạn không muốn hành vi này (cảnh báo xấu xí).
Đây là những gì nó trông như thế nào ở độ cao 96 điểm trên iPhone 5. Bộ chọn với điểm tràn cao khoảng 130 điểm. Khá gầy!
Tôi đang sử dụng điều này trong dự án của mình để ngăn bộ chọn lan ra đến độ cao không cần thiết. Kỹ thuật này cắt nhỏ nó xuống và ép tràn chặt hơn. Nó thực sự trông bóng bẩy và nhỏ gọn hơn một chút.
Đây là hình ảnh của chế độ xem cho thấy sự lan tỏa.
Đây là các ràng buộc IB mà tôi đã thêm.
Ngay cả khi nghĩ rằng nó không phải là thay đổi kích thước, một thủ thuật khác có thể hữu ích trong tình huống UIPicker nằm ở cuối màn hình.
Người ta có thể thử di chuyển nó xuống một chút, nhưng hàng trung tâm sẽ vẫn hiển thị. Điều này sẽ giúp tiết lộ một số khoảng trống phía trên bộ chọn vì các hàng dưới cùng sẽ nằm ngoài màn hình.
Tôi nhắc lại rằng đây không phải là cách thay đổi chiều cao của chế độ xem UIPicker mà là một số ý tưởng về những gì bạn có thể làm nếu tất cả các nỗ lực khác không thành công.
Được rồi, sau một thời gian dài vật lộn với chế độ xem ngu ngốc trong iOS 4, tôi đã quyết định thay đổi điều khiển của mình thành bảng đơn giản: đây là mã:
ComboBoxView.m = which is actually looks more like pickerview.
//
// ComboBoxView.m
// iTrophy
//
// Created by Gal Blank on 8/18/10.
//
#import "ComboBoxView.h"
#import "AwardsStruct.h"
@implementation ComboBoxView
@synthesize displayedObjects;
#pragma mark -
#pragma mark Initialization
/*
- (id)initWithStyle:(UITableViewStyle)style {
// Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
if ((self = [super initWithStyle:style])) {
}
return self;
}
*/
#pragma mark -
#pragma mark View lifecycle
/*
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
*/
/*
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
*/
/*
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}
*/
/*
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}
*/
/*
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
}
*/
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/
#pragma mark -
#pragma mark Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
return [[self displayedObjects] count];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
//cell.contentView.frame = CGRectMake(0, 0, 230.0,16);
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 5, 230.0,19)] autorelease];
VivatAwardsStruct *vType = [displayedObjects objectAtIndex:indexPath.row];
NSString *section = [vType awardType];
label.tag = 1;
label.font = [UIFont systemFontOfSize:17.0];
label.text = section;
label.textAlignment = UITextAlignmentCenter;
label.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
label.adjustsFontSizeToFitWidth=YES;
label.textColor = [UIColor blackColor];
//label.autoresizingMask = UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:label];
//UIImage *image = nil;
label.backgroundColor = [UIColor whiteColor];
//image = [awards awardImage];
//image = [image imageScaledToSize:CGSizeMake(32.0, 32.0)];
//[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
//UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
//cell.accessoryView = imageView;
//[imageView release];
}
return cell;
}
/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
*/
/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/
/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the item to be re-orderable.
return YES;
}
*/
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic may go here. Create and push another view controller.
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
*/
}
#pragma mark -
#pragma mark Memory management
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Relinquish ownership any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
// For example: self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
Đây là tệp .h cho điều đó:
//
// ComboBoxView.h
// iTrophy
//
// Created by Gal Blank on 8/18/10.
//
#import <UIKit/UIKit.h>
@interface ComboBoxView : UITableViewController {
NSMutableArray *displayedObjects;
}
@property (nonatomic, retain) NSMutableArray *displayedObjects;
@end
now, in the ViewController where I had Apple UIPickerView I replaced with my own ComboBox view and made it size what ever I wish.
ComboBoxView *mypickerholder = [[ComboBoxView alloc] init];
[mypickerholder.view setFrame:CGRectMake(50, 220, 230, 80)];
[mypickerholder setDisplayedObjects:awardTypesArray];
thế là xong, bây giờ việc duy nhất còn lại là tạo một biến thành viên trong dạng xem hộp kết hợp sẽ giữ lựa chọn hàng hiện tại và chúng ta đã sẵn sàng.
Chúc mọi người vui vẻ.
Nói chung, bạn không thể làm điều đó trong xib hoặc khung thiết lập theo chương trình nhưng nếu bạn mở xib gốc của nó làm nguồn và thay đổi chiều cao từ đó thì nó sẽ hoạt động. Nhấp chuột phải vào xib trong đó chứa bộ chọn, Chế độ xem tìm kiếm và bạn có thể tìm thấy chiều cao, chiều rộng, v.v. trong thẻ đó, Thay đổi chiều cao ở đó rồi lưu tệp.
<pickerView contentMode="scaleToFill" id="pai-pm-hjZ">
<rect key="frame" x="0.0" y="41" width="320" height="100"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<connections>
<outlet property="dataSource" destination="-1" id="Mo2-zp-Sl4"/>
<outlet property="delegate" destination="-1" id="nfW-lU-tsU"/>
</connections>
</pickerView>
Theo như tôi biết, không thể thu nhỏ UIPickerView. Tôi cũng chưa thực sự thấy một cái ngắn hơn được sử dụng ở bất cứ đâu. Tôi đoán rằng đó là một triển khai tùy chỉnh nếu họ cố gắng thu nhỏ nó.
Nếu bạn muốn tạo bộ chọn của mình trong IB, bạn có thể thay đổi kích thước sau đó thành kích thước nhỏ hơn. Hãy kiểm tra để đảm bảo rằng nó vẫn vẽ chính xác, vì có một số điểm khiến nó trông rất tệ.
Swift : Bạn cần thêm một lượt xem phụ có clip vào giới hạn
var DateView = UIView(frame: CGRectMake(0, 0, view.frame.width, 100))
DateView.layer.borderWidth=1
DateView.clipsToBounds = true
var myDatepicker = UIDatePicker(frame:CGRectMake(0,-20,view.frame.width,162));
DateView.addSubview(myDatepicker);
self.view.addSubview(DateView)
Thao tác này sẽ thêm bộ chọn ngày độ cao 100 được cắt bớt ở đầu bộ điều khiển chế độ xem.
Mẹo của tôi: sử dụng lớp mặt nạ của datepicker để làm cho datePicker hiển thị một số phần. như bạn thấy giống như thay đổi khung của datepicke.
- (void)timeSelect:(UIButton *)timeButton {
UIDatePicker *timePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 550)];
timePicker.backgroundColor = [UIColor whiteColor];
timePicker.layer.mask = [self maskLayerWithDatePicker:timePicker];
timePicker.layer.masksToBounds = YES;
timePicker.datePickerMode = UIDatePickerModeTime;
[self.view addSubview:timePicker];
}
- (CALayer *)maskLayerWithDatePicker:(UIDatePicker *)datePicker {
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, datePicker.width*0.8, datePicker.height*0.8) cornerRadius:10];
shapeLayer.path = path.CGPath;
return shapeLayer;
}
Nhúng vào chế độ xem ngăn xếp. Chế độ xem ngăn xếp là một thành phần được Apple bổ sung gần đây trong SDK iOS của họ để phản ánh việc triển khai dựa trên lưới trong các thư viện giao diện người dùng web dựa trên java script như bootstrap.
Như đã đề cập ở trên UIPickerView
bây giờ có thể thay đổi kích thước. Tôi chỉ muốn nói thêm rằng nếu bạn muốn thay đổi chiều cao của pickerView trong ô tableView, tôi đã không thành công với việc đặt neo chiều cao thành một hằng số. Tuy nhiên, sử dụng lessThanOrEqualToConstant
có vẻ hiệu quả.
class PickerViewCell: UITableViewCell {
let pickerView = UIPickerView()
func setup() {
// call this from however you initialize your cell
self.contentView.addSubview(self.pickerView)
self.pickerView.translatesAutoresizingMaskIntoConstraints = false
let constraints: [NSLayoutConstraint] = [
// pin the pickerView to the contentView's layoutMarginsGuide
self.pickerView.leadingAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.leadingAnchor),
self.pickerView.topAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.topAnchor),
self.pickerView.trailingAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.trailingAnchor),
self.pickerView.bottomAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.bottomAnchor),
// set the height using lessThanOrEqualToConstant
self.pickerView.heightAnchor.constraint(lessThanOrEqualToConstant: 100)
]
NSLayoutConstraint.activate(constraints)
}
}
Sau một ngày dài vò đầu bứt tai, tôi đã tìm thấy thứ phù hợp với mình. Các mã bên dưới sẽ tạo lại UIDatePicker mỗi khi người dùng thay đổi hướng điện thoại. Điều này sẽ loại bỏ bất kỳ trục trặc nào mà UIDatePicker gặp phải sau khi thay đổi hướng.
Vì chúng tôi đang tạo lại UIDatePicker, chúng tôi cần một biến cá thể sẽ giữ giá trị ngày đã chọn. Các mã dưới đây được thử nghiệm trên iOS 4.0.
@interface AdvanceDateViewController : UIViewController<UIPickerViewDelegate> {
UIDatePicker *datePicker;
NSDate *date;
}
@property (nonatomic, retain) UIDatePicker *datePicker;
@property (nonatomic, retain) NSDate *date;
-(void)resizeViewWithOrientation:(UIInterfaceOrientation) orientation;
@end
@implementation AdvanceDateViewController
@synthesize datePicker, date;
- (void)viewDidLoad {
[super viewDidLoad];
[self resizeViewWithOrientation:self.interfaceOrientation];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self resizeViewWithOrientation:self.interfaceOrientation];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self resizeViewWithOrientation:toInterfaceOrientation];
}
-(void)resizeViewWithOrientation:(UIInterfaceOrientation) orientation{
[self.datePicker removeFromSuperview];
[self.datePicker removeTarget:self action:@selector(refreshPickupDate) forControlEvents:UIControlEventValueChanged];
self.datePicker = nil;
//(Re)initialize the datepicker, thanks to Apple's buggy UIDatePicker implementation
UIDatePicker *dummyDatePicker = [[UIDatePicker alloc] init];
self.datePicker = dummyDatePicker;
[dummyDatePicker release];
[self.datePicker setDate:self.date animated:YES];
[self.datePicker addTarget:self action:@selector(refreshPickupDate) forControlEvents:UIControlEventValueChanged];
if(UIInterfaceOrientationIsLandscape(orientation)){
self.datePicker.frame = CGRectMake(0, 118, 480, 162);
} else {
self.datePicker.frame = CGRectMake(0, 200, 320, 216);
}
[self.view addSubview:self.datePicker];
[self.view setNeedsDisplay];
}
@end
stockPicker = [[UIPickerView alloc] init];
stockPicker.frame = CGRectMake(70.0,155, 180,100);
Nếu bạn muốn đặt kích thước của UiPickerView. Mã trên chắc chắn sẽ làm việc cho bạn.
Trong iOS 5.0, tôi có những thứ sau để hoạt động:
UIDatePicker *picker = [[UIDatePicker alloc] init];
picker.frame = CGRectMake(0.0, 0.0, 320.0, 160.0);
Điều này đã tạo ra một công cụ chọn ngày giống như công cụ Apple sử dụng trong ứng dụng Lịch khi tạo sự kiện mới ở chế độ ngang. (Cao 3 hàng thay vì 5.) Điều này không hoạt động khi tôi đặt khung trong initWithFrame:
phương pháp, nhưng cho đến nay hoạt động khi đặt nó bằng một phương pháp riêng biệt.
cho iOS 5:
nếu bạn xem nhanh Giao thức UIPickerView Tham chiếu
bạn sẽ tìm thấy
– pickerView:rowHeightForComponent:
– pickerView:widthForComponent:
Tôi nghĩ là người đầu tiên bạn đang tìm kiếm
pickerView:rowHeightForComponent:
là phương pháp ủy quyền để quyết định chiều cao của mỗi hàng - không phải chiều cao của chế độ xem bộ chọn.