UIPickerView yüksekliğini değiştirmek mümkün mü? Bazı uygulamalarda daha kısa PickerViews var gibi görünüyor, ancak daha küçük bir çerçeve ayarlamak işe yaramıyor ve çerçeve Arabirim Oluşturucu'da kilitlendi.
UIPickerView yüksekliğini değiştirmek mümkün mü? Bazı uygulamalarda daha kısa PickerViews var gibi görünüyor, ancak daha küçük bir çerçeve ayarlamak işe yaramıyor ve çerçeve Arabirim Oluşturucu'da kilitlendi.
Yanıtlar:
Görünüşe göre Apple'ın özellikle varsayılan yüksekliğiyle karıştırmaya davet etmediği açık görünüyor UIPickerView
, ancak tam kontrolü ele alarak ve oluşturma sırasında istenen bir çerçeve boyutunu geçerek görünümün yüksekliğinde bir değişiklik elde edebileceğinizi buldum , örneğin:
smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Çeşitli yükseklik ve genişliklerde görsel aksaklıklar olduğunu keşfedeceksiniz. Açıkçası, bu aksaklıkların ya bir şekilde çözülmesi ya da bunları sergilemeyen başka bir boyut seçilmesi gerekir.
Yukarıdaki yaklaşımlardan hiçbiri iOS 4.0'da çalışmaz
PickerView'ın yüksekliği artık yeniden boyutlandırılamaz. 4.0'da bir seçicinin çerçevesini değiştirmeye çalışırsanız konsola atılan bir mesaj var:
-[UIPickerView setFrame:]: invalid height value 66.0 pinned to 162.0
Hem OS 3.xx hem de OS 4.0'da çalışan daha küçük bir seçicinin etkisini elde etmek için oldukça radikal bir şey yaptım. Seçiciyi, SDK'nın olması gerektiğine karar verdiği boyutta bıraktım ve bunun yerine, arka plan resmimde seçicinin görünür hale gelmesini sağlayan şeffaf bir kesik pencere yaptım. Ardından, seçiciyi arka planımın arkasına yerleştirin (Z Sıralamasıyla) UIImageView, böylece arka planımdaki şeffaf pencere tarafından dikte edilen seçicinin yalnızca bir kısmı görünür.
İçin yalnızca üç geçerli yükseklik vardır UIPickerView (162.0, 180.0 and 216.0)
.
Seçiciyi size kolaylık sağlayacak şekilde yerleştirmek için CGAffineTransformMakeTranslation
ve CGAffineTransformMakeScale
işlevlerini kullanabilirsiniz .
Misal:
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));
Yukarıdaki kod, seçici görünümün yüksekliğini yarıya değiştirir ve tam (Sol-x1, Üst-y1) konumuna yeniden konumlandırır.
Deneyin:
pickerview.transform = CGAffineTransformMakeScale(.5, 0.5);
İOS 4.2 ve 4.3'te aşağıdakiler çalışır:
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.frame = CGRectMake(0, 0, 320, 180);
[self addSubview:datePicker];
Aşağıdakiler çalışmıyor:
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
[self addSubview:datePicker];
Uygulama mağazasında 3 satırlık tarih seçiciye sahip bir uygulamam var. Tarih seçicinin kenarlığının altındaki metni gördüğünüz için yükseklik değişikliğinin engellenmiş olabileceğini düşündüm, ancak bu normal 216 yükseklik tarih seçicisine de oluyor.
Hata hangisi? Tahminin benimki kadar iyi.
Ayrıca UIDatePicker
(ve UIPickerView
) 162.0, 180.0 ve 216.0 için 3 geçerli yükseklik vardır . Başka bir UIPickerView
şeye yükseklik ayarlarsanız , bir iOS cihazında hata ayıklarken konsolda aşağıdakileri göreceksiniz.
2011-09-14 10:06:56.180 DebugHarness[1717:707] -[UIPickerView setFrame:]: invalid height value 300.0 pinned to 216.0
Bunu bulduk edebilirsiniz değil sadece arayüz oluşturucu ile - UIPickerView boyutunu düzenleyin. .xib dosyasını bir metin düzenleyiciyle açın ve seçici görünümünün boyutunu istediğiniz gibi ayarlayın. Arayüz oluşturucu boyutu sıfırlamıyor ve çalışıyor gibi görünüyor. Eminim elma bir sebepten dolayı boyutu kilitledi, bu yüzden neyin işe yaradığını görmek için farklı boyutlarla denemeniz gerekecek.
UIPickerView
olması gerektiği gibi davranmasını sağlarUIViewController
viewWillLayoutSubviews
Yeniden ölçeklendirmek / konumlandırmak için içinde çalışırUIPickerView
UIPopover
UIPickerView
pickerView viewForRow
Alt görünümler için dönüşümü geri almak için kullanılmasını gerektirirAlt sınıf UIPickerView ve aşağıdaki kodu kullanarak iki yöntemin üzerine yazın. Alt sınıflandırma, sabit yükseklik ve dönüştürme yaklaşımını birleştirir.
#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;
}
Bir seçici görünümün görünür yüksekliğini değiştirmenin kolay bir yolu, seçiciyi bir UIView içine yerleştirmek, üst görünümün yüksekliğini seçicide görmek istediğiniz yüksekliğe ayarlamak ve ardından üst UIView'deki Arayüz Oluşturucu'da "Klip Alt Görünümleri" ni etkinleştirmektir. veya view.clipsToBounds = true
kod olarak ayarlayın .
Clip Subviews
. ayrıca boyu UIPickerView
daha uzun olmalıdır - ve sizin merkezinizin UIPickerView
ebeveynin içinde görünmesini UIView
UIPickerView
koddan oluşturmadım ).
Yukarıdaki tavsiyelerin hiçbirine uyamadım.
Birden fazla öğretici izledim ve bunu en faydalı buldum :
Uygulamamda çalışan "viewDidLoad" yönteminin içine yeni yüksekliği ayarlamak için aşağıdaki kodu ekledim.
UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
[self.view addSubview:picker];
picker.delegate = self;
picker.dataSource = self;
Umarım bu yardımcı olmuştur!
Bu, iOS 9'da çok değişti (iOS 8'de burada gördüğümüze oldukça benzer). Yalnızca iOS 9'u hedeflemeyi göze alabiliyorsanız UIPickerView
, çerçevesini ayarlayarak uygun gördüğünüz şekilde yeniden boyutlandırırsınız . İyi!
UIPickerView ve UIDatePicker artık yeniden boyutlandırılabilir ve uyarlanabilir - daha önce, bu görünümler, onları yeniden boyutlandırmayı deneseniz bile varsayılan bir boyutu zorlardı. Bu görünümler artık iPhone'daki cihaz genişliği yerine tüm cihazlarda varsayılan olarak 320 nokta genişliğine sahip.
Varsayılan boyutun eski uygulamasına dayanan arayüzler, iOS 9 için derlendiğinde muhtemelen yanlış görünecektir. Karşılaşılan tüm sorunlar, örtülü davranışa dayanmak yerine seçici görünümlerini istenen boyuta tamamen sınırlayarak veya boyutlandırarak çözülebilir.
İos 7, Xcode 5 ile çalışıyorum. Tarih seçicinin yüksekliğini dolaylı olarak bir görünüm içine alarak ayarlayabildim. Konteyner görünümlerinin yüksekliği ayarlanabilir.
IB veya kodda bir görünüm oluşturun. Seçicinizi bu görünümün bir alt görünümü olarak ekleyin. Görünümü yeniden boyutlandırın. Bu IB'de yapılması en kolay yoldur. Görünümden gözetimine ve seçiciden bu yeni görünüme kadar kısıtlamalar oluşturun.
Seçici etrafında kıvrıldığından, görünümün üstüne ve altına dökülür. Seçiciden görünüme üst ve alt sınırlamalar eklediğinizde, IB'de, denetleme kabının üstünde ve altında 16 nokta gibi standart bir alan gösterdiğini görebilirsiniz. Bu davranışı istemiyorsanız görünümü kırpacak şekilde ayarlayın (çirkin uyarı).
İşte bir iPhone 5'te 96 puan yüksekte göründüğü gibi. Yayılmaya sahip seçici, yaklaşık 130 puan yüksek. Oldukça sıska!
Bunu projemde toplayıcının gereksiz bir yüksekliğe yayılmasını önlemek için kullanıyorum. Bu teknik onu keser ve daha sıkı bir dökülmeye zorlar. Aslında biraz daha kompakt olması daha düzgün görünüyor.
İşte yayılmayı gösteren bir görüntü.
İşte eklediğim IB kısıtlamaları.
Yeniden boyutlandırılmadığı düşünülse bile, UIPicker'ın ekranın alt kısmında olduğu durumda başka bir numara yardımcı olabilir.
Biraz aşağı doğru hareket ettirmeyi deneyebilirsiniz, ancak orta sıra görünür kalmalıdır. Bu, alt sıralar ekran dışında olacağından seçicinin üzerinde biraz boşluk ortaya çıkarmanıza yardımcı olacaktır.
Tekrar ediyorum, UIPicker görünümünün yüksekliğini değiştirmenin yolu bu değil, ancak diğer tüm girişimler başarısız olursa ne yapabileceğinize dair bir fikir.
Tamam, iOS 4'teki aptal seçim görüntüleme ile uzun süre uğraştıktan sonra, kontrolümü basit bir tabloya dönüştürmeye karar verdim: işte kod:
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
İşte bunun için .h dosyası:
//
// 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];
işte bu, şimdi geriye kalan tek şey, birleşik giriş kutusu görünümünde mevcut satır seçimini tutacak bir üye değişkeni oluşturmak ve gitmeye hazırız.
Herkesin tadını çıkarın.
Bunu genellikle xib'de ya da çerçeveyi programlı olarak ayarlayamazsınız, ancak ana xib'i kaynak olarak açıp yüksekliğini oradan değiştirirseniz, o zaman çalışır. Bu etikette, yüksekliği oradan değiştirin ve ardından dosyayı kaydedin.
<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>
Bildiğim kadarıyla, UIPickerView'ı küçültmek imkansız. Ayrıca hiçbir yerde kullanılan daha kısa bir tane görmedim. Tahminim, onu küçültmeyi başardılarsa, özel bir uygulamaydı.
Seçicinizi IB'de oluşturmak istiyorsanız, daha küçük bir boyuta sonradan yeniden boyutlandırabilirsiniz. İğrenç göründüğü bir nokta geldiğinden, yine de doğru çizdiğinden emin olmak için kontrol edin.
Swift : Sınırlara klibi olan bir alt görünüm eklemeniz gerekiyor
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)
Bu, görünüm denetleyicisinin üst kısmına kırpılmış 100 yüksekliğinde bir tarih seçici eklemelidir.
Benim numaram: datePicker'ın bir kısmını görünür kılmak için datepicker'ın maske katmanını kullanın. tıpkı tarih çubuğunun çerçevesini değiştirmek gibi.
- (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;
}
Yığın görünümüne gömün. Yığın görünümü, önyükleme gibi java betiği web tabanlı ön uç kitaplıklarındaki ızgara tabanlı uygulamaları yansıtmak için yakın zamanda Apple tarafından iOS SDK'larına eklenen bir bileşendir.
Yukarıda belirtildiği gibi UIPickerView
artık yeniden boyutlandırılabilir. Bir tableView Hücresinde pickerView'ün yüksekliğini değiştirmek isterseniz, yükseklik çapasını bir sabit olarak ayarlamada herhangi bir başarı elde edemediğimi eklemek istiyorum. Ancak, kullanmak lessThanOrEqualToConstant
işe yarıyor gibi görünüyor.
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)
}
}
Kafamı kaşımakla geçen uzun bir günün ardından, benim için işe yarayan bir şey buldum. Aşağıdaki kodlar, kullanıcı telefon yönünü her değiştirdiğinde UIDatePicker'ı yeniden oluşturacaktır. Bu, bir yönelim değişikliğinden sonra UIDatePicker'ın sahip olduğu hataları ortadan kaldıracaktır.
UIDatePicker'ı yeniden oluşturduğumuz için, seçilen tarih değerini koruyacak bir örnek değişkenine ihtiyacımız var. Aşağıdaki kodlar iOS 4.0'da test edilmiştir.
@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);
UiPickerView boyutunu ayarlamak istiyorsanız. Yukarıdaki kod kesinlikle sizin için çalışacaktır.
İOS 5.0'da çalışmak için aşağıdakileri aldım:
UIDatePicker *picker = [[UIDatePicker alloc] init];
picker.frame = CGRectMake(0.0, 0.0, 320.0, 160.0);
Bu, Apple'ın Takvim uygulamasında yatay modda yeni bir etkinlik oluştururken kullandığı gibi bir tarih seçici oluşturdu. (5 yerine 3 satır yüksek) Bu, çerçeveyi initWithFrame:
yöntem içinde ayarladığımda işe yaramadı , ancak şu ana kadar ayrı bir yöntem kullanarak ayarlarken çalışıyor.
iOS 5 için:
UIPickerView Protokol Referansına hızlıca bakarsanız
bulacaksın
– pickerView:rowHeightForComponent:
– pickerView:widthForComponent:
Bence aradığın ilk kişi
pickerView:rowHeightForComponent:
seçici görünümün yüksekliğine değil, her satırın yüksekliğine karar veren temsilci yöntemidir.