Frage

Ist es möglich, die Höhe der UIPickerView zu ändern? Einige Anwendungen scheinen kürzer PickerViews zu haben, aber einen kleineren Rahmen Einstellung scheint nicht zu funktionieren und der Rahmen wird in Interface Builder gesperrt.

War es hilfreich?

Lösung

Es scheint offensichtlich, dass Apple vor allem nicht mit der Standardhöhe der UIPickerView lädt Ausmisten, aber ich habe festgestellt, dass Sie eine Änderung in der Höhe erreichen kann, der Ansicht, durch die vollständige Kontrolle zu nehmen und eine gewünschte Rahmengröße in Erstellungszeit vorbei, zum Beispiel:

smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];

Sie werden feststellen, dass in verschiedenen Höhen und Breiten gibt es visuelle Störungen. Offensichtlich würden diese Störungen müssen entweder irgendwie um gearbeitet werden, oder eine andere Größe wählen, dass sie nicht ausstellen.

Andere Tipps

Keine der oben genannten Ansätze funktionieren in iOS 4.0

Die pickerHöhe ist nicht mehr wieder beträchtlich. Es ist eine Nachricht, die den Müll zu trösten, wenn Sie den Rahmen eines Picker in 4.0 zu ändern versuchen:

-[UIPickerView setFrame:]: invalid height value 66.0 pinned to 162.0 

ich am Ende etwas ganz radikal zu tun, die Wirkung eines kleineren Picker zu erhalten, die 4,0 in beiden OS 3.x und O arbeitet. Ich verließ den Picker zu sein, was Größe der SDK entscheidet es sein sollte und stattdessen einen Ausschnitt durch transparente Fenster auf meinem Hintergrundbild, durch die der Kommissionierer sichtbar wird. Dann legte einfach den Picker hinter (Z Auftrag wiese) mein Hintergrund UIImageView, so dass nur ein Teil des Picker ist sichtbar, die durch das transparente Fenster in meinem Hintergrund diktiert wird.

Es gibt nur drei gültige Höhen für UIPickerView (162.0, 180.0 and 216.0).

Sie können die CGAffineTransformMakeTranslation und CGAffineTransformMakeScale Funktionen verwenden, um richtig den Picker auf Ihren Komfort zu passen.

Beispiel:

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));

Der obige Code Änderung auf die Hälfte der Höhe des Pickers Ansicht und neu zu positionieren es auf die genaue (Links-x1, Top-y1) Position.

Versuchen:

pickerview.transform = CGAffineTransformMakeScale(.5, 0.5);

In iOS 4.2 & 4.3 folgende Arbeiten:

UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.frame = CGRectMake(0, 0, 320, 180);
[self addSubview:datePicker];

Die folgenden funktioniert nicht:

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
[self addSubview:datePicker];

Ich habe eine Anwendung, die mit einer 3-zeiliges Datumsauswahl im App-Store ist. Ich dachte, die Höhenänderung hätte verhindert werden kann, weil Sie den Text unter der Datumsauswahl der Grenze zu sehen, aber dies geschieht mit der normalen 216 Höhe Datumsauswahl zu.

Welches ist der Fehler? Ihre Vermutung ist so gut wie meine.

Auch gibt es 3 gültige Höhen für UIDatePicker (und UIPickerView) 162,0, 180,0 und 216,0. Wenn Sie eine UIPickerView Höhe auf etwas anderes gesetzt werden Sie die folgenden in der Konsole sehen, wenn sie auf einem iOS-Gerät debuggen.

2011-09-14 10:06:56.180 DebugHarness[1717:707] -[UIPickerView setFrame:]: invalid height value 300.0 pinned to 216.0

Ab iOS 9 können Sie frei UIPickerView Breite und Höhe verändern. Keine Notwendigkeit, die oben erwähnt verwenden Hacks verwandeln.

Ich habe festgestellt, dass Sie können bearbeiten Sie die Größe des UIPickerView - nur nicht mit Interface Builder. Öffnen Sie die .xib Datei mit einem Texteditor und legen Sie die Größe des Pickers Ansicht auf das, was Sie wollen. Interface Builder nicht zurückgesetzt, die Größe und es scheint zu funktionieren. Ich bin sicher, dass Apple die Größe für einen Grund gesperrt, so dass Sie mit unterschiedlichen Größen haben, experimentieren werden, um zu sehen, was funktioniert.

Vorteile:

  1. Macht SetFrame von UIPickerView verhalten, wie es sollte
  2. Kein Transformationscode in Ihrem UIViewController
  3. Funktioniert innerhalb viewWillLayoutSubviews / Position neu zu skalieren die UIPickerView
  4. Arbeiten auf dem iPad ohne UIPopover
  5. Die Oberklasse immer erhält eine gültige Höhe
  6. Kompatibel mit iOS 5

Nachteile:

  1. Benötigen Sie UIPickerView Unterklasse
  2. Erfordert die Verwendung von pickerView viewForRow die Transformation für die Subviews rückgängig zu machen
  3. UIAnimations könnte nicht funktionieren

Lösung:

Subclass UIPickerView und überschreiben die beiden Methoden den folgenden Code verwenden. Es verbindet Subklassifizieren, feste Höhe und der Transformationsansatz.

#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;
}

Eine einfache Möglichkeit, die sichtbare Höhe einer Picker-Ansicht zu ändern, ist die Kommissionierer in einem UIView einzubetten, stellen Sie die Höhe der Eltern im Hinblick auf die Höhe, die Sie von den Picker sehen möchten, dann aktivieren Sie „Clip Subviews“ im Interface Builder auf die Mutter UIView oder eingestellt view.clipsToBounds = true im Code.

Clip Subviews in IB

Ich war nicht in der Lage eine der oben genannten Rat zu folgen.

Ich sah mehrere Tutorials und gefunden dieses die meisten Vorteile:

Ich habe den folgenden Code die neue Höhe in der „viewDidLoad“ Methode zu setzen, die in meiner app gearbeitet.

UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)]; 
[self.view addSubview:picker];
picker.delegate = self;
picker.dataSource = self;

Ich hoffe, das war hilfreich!

Dies hat eine Menge in iOS 9 geändert (in iOS 8 ist es ziemlich ähnlich ist, was wir hier sehen). Wenn Sie sich leisten können, nur 9 iOS zum Ziel, dann die Größe Sie die UIPickerView wie Sie sehen, passen, durch seinen Rahmen zu setzen. Gut!

Hier ist es von iOS 9 Release Notes

  

UIPickerView und UIDatePicker sind jetzt resizable und   adaptive zuvor würden diese Ansichten, die eine Standardgröße erzwingen, auch wenn   Sie haben versucht, sie zu ändern. Diese Ansichten standardmäßig auch jetzt auf eine Breite   von 320 Punkten auf allen Geräten, statt an die Gerätebreite auf   iPhone.

     

Schnittstellen, die auf der alten Durchsetzung der Standardgröße verlassen wird   wahrscheinlich falsch aussehen, wenn angetroffen für iOS 9. Alle mögliche Probleme zusammengestellt   kann durch voll beschränke oder Schlichte Picker Blick auf die gelöst werden   gewünschte Größe stattdessen auf implizites Verhalten angewiesen zu sein.

Ich arbeite mit ios 7, Xcode 5. Ich war in der Lage, die Höhe der Datumsauswahl einzustellen indirekt, indem sie es in einer Ansicht umschließt. Die Behälter Ansichten Höhe eingestellt werden kann.

Auch dachte, es ist nicht Ändern der Größe, kann ein anderer Trick in der Situation helfen, wenn die UIPicker am unteren Rand des Bildschirms befindet.

kann man versuchen, es leicht nach unten bewegt, aber die mittlere Reihe sollten sichtbar bleiben. Dies wird helfen, etwas Platz über dem Picker zeigt seit untere Reihen offscreen werden.

Ich wiederhole, dass dies nicht der Weg ist UIPicker Ansicht der Höhe zu ändern, sondern eine Idee auf, was Sie tun können, wenn alle anderen Versuche scheitern.

Ok, nachdem er mit dem dummen picker in iOS für eine lange Zeit zu kämpfen 4, habe ich beschlossen, meine Kontrolle in einfache Tabelle zu ändern: hier ist der Code:

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

Hier ist die H-Datei für das:

//
//  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];

das ist es, jetzt das einzige, was übrig bleibt, ist eine Membervariable in der Combobox Ansicht zu erstellen, die aktuelle Zeile Auswahl halten wird, und wir sind gut zu gehen.

Genießen Sie jeden etwas dabei.

Sie können im Allgemeinen nicht tun es in xib oder Einstellframeanzahl programtically aber wenn man seine Eltern xib als Quelle und ändern Höhe öffnen von dort dann works.Right den xib klicken, in dem picker enthalten ist, suchen picker und Sie können Höhe finden , Breite usw. in diesem Tag, Höhe ändert es dann Datei speichern.

<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>

Erstellen Sie eine Ansicht in IB oder Code. Fügen Sie Ihre Kommissionierer als Subview dieser Ansicht. Ändern Sie die Größe der Ansicht. Dies ist am einfachsten in IB zu tun. Erstellen Sie Einschränkungen aus der Sicht seiner Superview und vom Picker auf diese neue Ansicht.

Da die Picker Kurven um es heraus schwappt über den oberen und unteren Rand der Ansicht. Sie können in IB sehen, wenn Sie oben und unten Einschränkungen aus dem Picker hinzufügen zu der Ansicht, es zeigt einen Standard-Raum etwas wie 16 Punkte oberhalb und unterhalb des Super Behälter. Stellen Sie die Ansicht, es zu befestigen, wenn Sie dieses Verhalten nicht wünschen (hässliche Warnung).

Hier ist, wie es bei 96 Punkten hoch auf ein iPhone aussieht 5. Der Picker mit den Spill-over über 130 Punkte hoch ist. Ziemlich dünn!

Ich verwende in meinem Projekt die Picker aus Ausbreiten zu einer unnötigen Höhe zu verhindern. Diese Technik trimmt es nach unten und zwingt einen festeren Spillover. Es sieht tatsächlich schlankeres etwas kompakter zu sein.

eingeben Bild Beschreibung hier

Hier ist ein Bild der Ansicht des Spill-over zeigt.

eingeben Bild Beschreibung hier

Hier ist die IB Einschränkungen ich hinzu.

eingeben Bild Beschreibung hier

Soweit ich weiß, ist es unmöglich, die UIPickerView zu schrumpfen. Ich habe auch nicht wirklich einen kürzeren überall dort eingesetzt gesehen. Meine Vermutung ist, dass es eine benutzerdefinierte Implementierung war, wenn sie es schrumpfen kamen an.

Sehen Sie meine Antwort auf diese Frage: UIPicker im Landschaftsmodus Sizing

Wenn Sie Ihre Kommissionierer in IB erstellen möchten, können Sie Post-Größe ändern auf eine kleinere Größe. Überprüfen Sie, ob es immer noch richtig, obwohl zieht, wie es kommt ein Punkt, wo es abscheulich aussieht.

Swift : Sie benötigen ein Subview mit Clip Grenzen hinzuzufügen

    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)

Dies sollte eine abgeschnittene 100 Höhe Datumsauswahl in der Spitze der View-Controller hinzuzufügen.

Mein Trick: picker der Maskenschicht verwendet sichtbar picker einen Teil zu machen. Wie Sie sehen genau wie der Rahmen des datepicke ändern.

- (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;
}

Ich verwende eine Maskenschicht ist es Anzeigegröße ändern

// swift 3.x
let layer = CALayer()
layer.frame = CGRect(x: 0,y:0, width: displayWidth, height: displayHeight)
layer.backgroundColor = UIColor.red.cgColor
pickerView.layer.mask = layer

in einem Stapel Ansicht einbetten. Stapelansicht ist eine Komponente vor kurzem hinzugefügt von Apple in ihrem iOS SDK Grid basierte Implementierungen in Java-Script webbasiertes Frontend-Bibliotheken wie Bootstrap widerspiegelt.

Wie oben erwähnt UIPickerView ist jetzt resizable. Ich möchte nur hinzufügen, wenn Sie, dass die Höhe des picker ändern möchten in einem Tableview Cell, ich keinen Erfolg mit der Einstellung der Höhe Anker auf einen konstanten hatte. Allerdings lessThanOrEqualToConstant Verwendung scheint zu funktionieren.

 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)
     }

 }

Nach einem langen Tag meinen Kopf kratzen, ich habe etwas gefunden, das funktioniert für mich. Die folgenden Codes werden neu die UIDatePicker jedes Mal der Benutzer das Telefon Orientierung ändern. Dies entfernt, was auch immer Pannen, dass die UIDatePicker haben nach einer Orientierungsänderung.

Da wir die UIDatePicker neu erstellen, müssen wir eine Instanzvariable, die das ausgewählte Datum Wert halten wird. Die Codes werden auf iOS unten getestet 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);

Wenn Sie die Größe von UIPickerView festlegen möchten. Above-Code ist sicherlich gonna Arbeit für u.

In iOS 5.0, ich habe folgende zu arbeiten:

UIDatePicker *picker = [[UIDatePicker alloc] init];
picker.frame = CGRectMake(0.0, 0.0, 320.0, 160.0);

So entstand eine Datumsauswahl wie das Apple in dem Kalender-App verwendet, wenn ein neues Ereignis im Querformat zu schaffen. (3 Reihen hoch statt 5.) Das hat nicht funktioniert, wenn ich den Rahmen innerhalb des initWithFrame: Verfahren eingestellt, aber so funktioniert weit, wenn es mit einem separaten Verfahren zu setzen.

für iOS 5:

wenn Sie einen kurzen Blick auf die UIPickerView Protokoll Referenz

Sie finden

– pickerView:rowHeightForComponent:
– pickerView:widthForComponent:

Ich denke, die erste ist, die Sie suchen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top