programing

UI Picker 보기 높이를 변경하는 방법

muds 2023. 5. 31. 18:35
반응형

UI Picker 보기 높이를 변경하는 방법

UI Picker View의 높이를 변경할 수 있습니까?일부 응용 프로그램은 선택기 보기가 더 짧은 것처럼 보이지만 더 작은 프레임을 설정하면 작동하지 않고 프레임이 인터페이스 작성기에 잠겨 있습니다.

애플이 기본 높이의 머킹을 특별히 초대하지 않는 것은 분명해 보입니다.UIPickerView그러나 완전한 제어를 수행하고 작성 시 원하는 프레임 크기를 전달하여 보기 높이를 변경할 수 있습니다. 예를 들어 다음과 같습니다.

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

다양한 높이와 폭에서 시각적 결함이 있다는 것을 알게 될 것입니다.분명히, 이 결함들은 어떻게든 해결하거나, 그것들을 보여주지 않는 다른 크기를 선택해야 할 것입니다.

iOS 4.0에서는 위의 접근 방식이 작동하지 않습니다.

선택기 보기의 높이는 더 이상 크기를 조정할 수 없습니다.4.0에서 선택 도구의 프레임을 변경하려고 하면 콘솔에 덤프되는 메시지가 있습니다.

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

저는 OS 3.xx와 OS 4.0 모두에서 작동하는 소형 피커의 효과를 얻기 위해 상당히 급진적인 작업을 하게 되었습니다.저는 피커를 SDK가 결정한 크기와 상관없이 유지하고 대신 배경 이미지에 피커가 보이도록 투명한 컷 스루 창을 만들었습니다.그런 다음 피커를 내 배경 UIImageView 뒤에 배치(Z Order wise)하여 내 배경의 투명 창에 의해 지시되는 피커의 일부만 보이도록 합니다.

유효한 높이는 세 가지입니다.UIPickerView (162.0, 180.0 and 216.0).

당신은 할 수 .CGAffineTransformMakeTranslation그리고.CGAffineTransformMakeScale사용자의 편의에 맞게 선택할 수 있는 기능을 참조하십시오.

예:

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

위의 코드는 선택기 보기의 높이를 절반으로 변경하고 정확한(왼쪽-x1, 위쪽-y1) 위치로 다시 배치합니다.

시도:

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

iOS 4.2 및 4.3에서는 다음 작업을 수행합니다.

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

다음은 작동하지 않습니다.

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

저는 3줄 달력 보기가 있는 앱스토어에 있는 앱을 가지고 있습니다.달력 보기의 테두리 아래에 있는 텍스트가 보이기 때문에 높이 변경이 방지되었을 수도 있다고 생각했는데, 일반적인 216 높이 달력 보기에도 이러한 현상이 발생합니다.

어떤 것이 벌레입니까?저도 잘 모르겠군요.

또한 3개의 유효한 높이가 있습니다.UIDatePicker)UIPickerView 162.0, 180.0 및 216.0.으로 설정하면,UIPickerViewiOS 기기에서 디버깅할 때 콘솔에 다음과 같은 정보가 표시됩니다.

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

부터는 iOS 9를 할 수 .UIPickerView의 너비와 높이.위에서 언급한 변환 해킹을 사용할 필요가 없습니다.

UI PickerView의 크기를 편집할 수 있다는 것을 알게 되었습니다. 단지 인터페이스 빌더를 사용할 수 없습니다.텍스트 편집기로 .xib 파일을 열고 선택기 보기의 크기를 원하는 대로 설정합니다.인터페이스 작성기가 크기를 재설정하지 않고 작동하는 것 같습니다.애플이 크기를 잠근 것은 분명 이유가 있을 것이기 때문에 어떤 것이 효과가 있는지를 보기 위해서는 다양한 크기로 실험을 해야 할 것입니다.

장점:

  1. setFrame의 합니다.UIPickerView마땅히 해야 할 일처럼 행동하다
  2. 에 .UIViewController
  3. 내에서 viewWillLayoutSubviews크기를 조정하다/위치를 조정하다UIPickerView
  4. 없이 합니다.UIPopover
  5. 슈퍼 클래스는 항상 유효한 높이를 받습니다.
  6. iOS 5와 함께 작동합니다.

단점:

  1. 하클스를사합니다야해용래를 요구합니다.UIPickerView
  2. 사용이필다니를 .pickerView viewForRow하는 방법은 다음과 같습니다.
  3. UIA 애니메이션이 작동하지 않을 수 있음

솔루션:

하위 클래스 UIPicker다음 코드를 사용하여 두 메서드를 보고 덮어씁니다.하위 분류, 고정 높이 및 변환 접근 방식을 결합합니다.

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

할 수 뷰의 상위 에서 "Clip를 활성화하거나 입니다. 부모 UI 보기 또는 집합의 인터페이스 작성기에서 "하위 보기 클리핑"을 사용 가능으로 설정하는 것입니다.view.clipsToBounds = true암호상

IB에서 하위 뷰 클리핑

저는 위의 조언을 전혀 따를 수 없었습니다.

여러 튜토리얼을 보고 이 튜토리얼이 가장 유용하다는 것을 알게 되었습니다.

저는 제 앱에서 작동하는 "viewDidLoad" 메소드 안에서 새로운 높이를 설정하기 위해 다음 코드를 추가했습니다.

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

이것이 도움이 되었기를 바랍니다!

이것은 iOS 9에서 많이 바뀌었습니다(iOS 8에서는 여기서 보는 것과 매우 유사합니다). 대상으로 할 수 9의 크기를 할 수 .UIPickerView적합하다고 생각되는 대로 프레임을 설정합니다.

iOS 9 릴리스 노트에서 가져온 것입니다.

UIPickerView 및 UIDatePicker는 이제 크기 조정 및 적응이 가능합니다. 이전에는 크기 조정을 시도하더라도 이러한 보기에 기본 크기가 적용되었습니다.이러한 보기는 이제 iPhone의 장치 너비가 아닌 모든 장치에서 320포인트의 너비로 기본 설정됩니다.

기본 크기의 이전 적용에 의존하는 인터페이스는 iOS 9용으로 컴파일될 때 잘못된 것으로 보일 수 있습니다.발생한 모든 문제는 암시적 동작에 의존하는 대신 선택기 보기를 원하는 크기로 완전히 제한하거나 크기를 조정하여 해결할 수 있습니다.

저는 ios 7, Xcode 5에서 일하고 있습니다.달력 보기를 포함하여 달력 보기의 높이를 간접적으로 조정할 수 있었습니다.용기 보기 높이를 조정할 수 있습니다.

IB 또는 코드로 보기를 만듭니다.선택기를 이 보기의 하위 보기로 추가합니다.보기 크기를 조정합니다.이것은 IB에서 가장 쉽게 할 수 있습니다.뷰에서 수퍼뷰로, 선택기에서 이 새 뷰로 제약조건을 작성합니다.

선택기가 곡선을 그리므로 보기의 위쪽과 아래쪽으로 쏟아집니다.IB에서는 선택기에서 보기로 위쪽 및 아래쪽 제약 조건을 추가하면 수퍼뷰 컨테이너 위와 아래쪽 16포인트와 같은 표준 공간을 보여줍니다.이 동작을 원하지 않는 경우 보기를 클리핑하도록 설정합니다(미운 경고).

이것은 아이폰 5의 96포인트 높이에서 보이는 것입니다.스필오버가 있는 피커의 높이는 약 130 포인트입니다.꽤 말랐어요!

선택기가 불필요한 높이로 퍼지는 것을 방지하기 위해 이 기능을 프로젝트에 사용하고 있습니다.이 기술은 그것을 다듬고 더 엄격하게 엎지르도록 강요합니다.사실 좀 더 컴팩트한 것이 더 매끈해 보입니다.

여기에 이미지 설명 입력

여기 스필오버를 보여주는 뷰의 이미지가 있습니다.

여기에 이미지 설명 입력

제가 추가한 IB 제약 조건은 다음과 같습니다.

여기에 이미지 설명 입력

와 같이, 서언바같와이급한에위▁as같이와바▁mentioned.UIPickerView이제 크기를 조정할 수 있습니다.표 보기 셀에서 피커 보기의 높이를 변경하려는 경우 높이 앵커를 상수로 설정하지 못했습니다., 단, 용을 사용하는 것은lessThanOrEqualToConstant효과가 있는 것 같습니다.

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

 }

크기가 조정되지 않더라도 UIPicker가 화면 하단에 있는 상황에서 다른 트릭이 도움이 될 수 있습니다.

아래쪽으로 약간 이동할 수 있지만 중앙 행은 계속 표시되어야 합니다.맨 아래 행은 화면 밖에 있으므로 선택기 위에 약간의 공간이 표시됩니다.

이것이 UI Picker 보기의 높이를 변경하는 방법이 아니라 다른 모든 시도가 실패할 경우 수행할 수 있는 작업에 대한 몇 가지 아이디어임을 반복합니다.

좋아요, iOS 4의 멍청한 피커 뷰와 오랫동안 씨름한 후, 저는 제 컨트롤을 간단한 테이블로 바꾸기로 결정했습니다: 코드는 다음과 같습니다:

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

다음은 .h 파일입니다.

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

이제 남은 것은 콤보 상자 보기에 현재 행 선택을 유지할 멤버 변수를 만드는 것입니다. 이제 시작하겠습니다.

모두 맛있게 드세요.

일반적으로 xib 또는 프레임을 프로그래밍 방식으로 설정할 수는 없지만 상위 xib를 소스로 열고 거기서 높이를 변경하면 작동합니다.피커 뷰가 포함된 xib를 마우스 오른쪽 버튼으로 클릭합니다. 피커 뷰를 검색하면 해당 태그에서 높이, 너비 등을 찾을 수 있습니다. 높이를 변경한 다음 파일을 저장합니다.

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

제가 알기로는 UIPicker View를 축소하는 것은 불가능한 것으로 알고 있습니다.저는 또한 어느 곳에서도 더 짧은 것을 실제로 본 적이 없습니다.제 생각에는 그들이 그것을 축소할 수 있다면 그것은 맞춤형 구현이었을 것입니다.

IB에서 선택기를 만들려면 선택기의 크기를 더 작은 크기로 조정할 수 있습니다.그래도 여전히 정확하게 그려지는지 확인합니다. 왜냐하면 극악하게 보이는 지점이 오기 때문입니다.

Swift: 경계에 클립이 있는 하위 뷰를 추가해야 합니다.

    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)

보기 컨트롤러의 맨 위에 잘라낸 100개의 높이 달력 보기를 추가해야 합니다.

나의 요령: datepicker의 마스크 레이어를 사용하여 datepicker의 일부를 볼 수 있도록 합니다.데이트 픽의 틀을 바꾸는 것처럼 보이는 것입니다.

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

마스크 레이어를 사용하여 표시 크기를 변경하는 경우

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

스택 뷰에 포함합니다.스택 뷰는 부트스트랩과 같은 자바 스크립트 웹 기반 프런트 엔드 라이브러리에서 그리드 기반 구현을 반영하기 위해 Apple이 iOS SDK에 최근 추가한 구성 요소입니다.

머리를 긁적이며 보낸 긴 하루 후에, 저는 저에게 맞는 무언가를 발견했습니다.아래 코드는 사용자가 전화 방향을 변경할 때마다 UIDatePicker를 다시 만듭니다.이렇게 하면 방향 변경 후 UIDatePicker에 발생한 모든 결함이 제거됩니다.

UIDatePicker를 다시 생성하기 때문에 선택한 날짜 값을 유지할 인스턴스 변수가 필요합니다.아래 코드는 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);

UiPickerView의 크기를 설정하려는 경우.위의 코드는 확실히 당신에게 효과가 있을 것입니다.

iOS 5.0에서는 다음과 같은 기능이 제공되었습니다.

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

이렇게 하면 Apple이 가로 모드에서 새 이벤트를 만들 때 달력 앱에서 사용하는 달력 보기와 같은 달력 보기가 만들어집니다. (5행 대신 3행 높이)이것은 내가 프레임을 설정했을 때 작동하지 않았습니다.initWithFrame:그러나 지금까지는 별도의 방법을 사용하여 설정할 때 작동합니다.

iOS 5의 경우:

UIPickerView Protocol Reference를 간단히 살펴보면 다음과 같습니다.

알게 될 것입니다

– pickerView:rowHeightForComponent:
– pickerView:widthForComponent:

제 생각에 당신이 찾는 첫번째 것은

언급URL : https://stackoverflow.com/questions/573979/how-to-change-uipickerview-height

반응형